├── template.env ├── .gitignore ├── go.mod ├── go.sum ├── util └── util.go ├── command └── command.go ├── restaurant ├── event.go ├── innerstyle.go ├── dish_container.go ├── restaurant.go └── dish.go ├── reverse ├── decode-amf3.py ├── README.md └── dissector.lua ├── map └── map.go ├── game └── game.go ├── login └── login.go ├── README.md ├── cmd └── main.go ├── conn └── connection.go └── LICENSE /template.env: -------------------------------------------------------------------------------- 1 | USER=12345678 2 | PASSWORD=password 3 | DISH_ID=1340001 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | 3 | reverse/* 4 | !reverse/README.md 5 | !reverse/*.lua 6 | !reverse/*.py 7 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/mikucat0309/mole 2 | 3 | go 1.19 4 | 5 | require github.com/joho/godotenv v1.5.1 6 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= 2 | github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= 3 | -------------------------------------------------------------------------------- /util/util.go: -------------------------------------------------------------------------------- 1 | package util 2 | 3 | func Int(u int64, err error) int { 4 | return int(u) 5 | } 6 | 7 | func Int16(u int64, err error) int16 { 8 | return int16(u) 9 | } 10 | 11 | func Int32(u int64, err error) int32 { 12 | return int32(u) 13 | } 14 | 15 | func UInt16(u uint64, err error) uint16 { 16 | return uint16(u) 17 | } 18 | 19 | func UInt32(u uint64, err error) uint32 { 20 | return uint32(u) 21 | } 22 | -------------------------------------------------------------------------------- /command/command.go: -------------------------------------------------------------------------------- 1 | package command 2 | 3 | const ( 4 | LOGIN = 0xc9 5 | INIT_PLAYER = 0x2b02 6 | MAP_WALK = 0x12f 7 | MAP_LEAVE = 0x192 8 | MAP_ENTER = 0x191 9 | RESTAURANT_GET_INFO = 0x3f6 10 | RESTAURUNT_GET_EVENT = 0x407 11 | RESTAURUNT_SOLVE_EVENT = 0x408 12 | RESTAURANT_GET_FOOD_EXP = 0x416 13 | RESTAURANT_MAKE_FOOD = 0x3f9 14 | RESTAURANT_CLEAR_FOOD = 0x3fb 15 | RESTAURANT_PREPARE_FOOD = 0x3fc 16 | RESTAURANT_STORE_FOOD = 0x3fd 17 | ) 18 | -------------------------------------------------------------------------------- /restaurant/event.go: -------------------------------------------------------------------------------- 1 | package restaurant 2 | 3 | import ( 4 | cmd "github.com/mikucat0309/mole/command" 5 | "github.com/mikucat0309/mole/game" 6 | ) 7 | 8 | type ( 9 | EventID uint32 10 | EventAnswer uint32 11 | ) 12 | 13 | func GetEvent(c *game.GameConn) (eventID EventID, err error) { 14 | err = c.Conn.SendRecv(cmd.RESTAURUNT_GET_EVENT, []byte{}, &eventID) 15 | return 16 | } 17 | 18 | func SolveEvent(c *game.GameConn, ans EventAnswer) (err error) { 19 | _, err = c.Conn.SendCmd(cmd.RESTAURUNT_SOLVE_EVENT, ans) 20 | return 21 | } 22 | -------------------------------------------------------------------------------- /reverse/decode-amf3.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import zlib 3 | import json 4 | from pyamf import amf3 5 | from pathlib import Path 6 | 7 | def main(): 8 | if len(sys.argv) < 2: 9 | return 10 | f = Path(sys.argv[1]) 11 | df = Path(sys.argv[2]) if len(sys.argv) >= 3 else f.parent / f'{f.stem}.json' 12 | 13 | with open(f, 'rb') as fp: 14 | buf = fp.read() 15 | buf = zlib.decompress(buf) 16 | ba = amf3.ByteArray(buf) 17 | obj = ba.readObject() 18 | 19 | with open(df, 'w') as fp: 20 | json.dump(obj, fp, ensure_ascii=False) 21 | 22 | if __name__ == '__main__': 23 | main() 24 | -------------------------------------------------------------------------------- /map/map.go: -------------------------------------------------------------------------------- 1 | package map_ 2 | 3 | import ( 4 | cmd "github.com/mikucat0309/mole/command" 5 | "github.com/mikucat0309/mole/game" 6 | ) 7 | 8 | type ( 9 | MapType uint32 10 | ) 11 | 12 | const ( 13 | FARM MapType = 0x2 14 | RESTARUNT MapType = 0x1f 15 | LAHM MapType = 0x20 16 | PIG MapType = 0x22 17 | PIG_BEAUTY MapType = 0x23 18 | PIG_FACTORY MapType = 0x24 19 | ) 20 | 21 | func LeaveMap(c *game.GameConn) { 22 | c.Conn.SendCmd(cmd.MAP_LEAVE, []byte{}) 23 | } 24 | 25 | type EnterMapData struct { 26 | MapID uint32 27 | MapType MapType 28 | OldMapID int32 29 | OldMapType int32 30 | NewGrid int32 31 | OldGrid int32 32 | } 33 | 34 | func EnterMap(c *game.GameConn, mapType MapType) { 35 | c.Conn.SendCmd(cmd.MAP_ENTER, EnterMapData{c.User, mapType, 0, 0, 0, 0}) 36 | } 37 | -------------------------------------------------------------------------------- /reverse/README.md: -------------------------------------------------------------------------------- 1 | # 逆向工程 2 | 3 | ## 簡介 4 | 5 | Flash 程式是由 ActionScript 撰寫而成,swf 檔案是封裝檔,類似 Java 的 jar 封裝檔。 6 | 7 | ## 準備環境 8 | 9 | ### Flash Player 10 | 11 | Adobe 已經移除下載連結,但摩爾莊園官網有提供 12 | 13 | [http://asupdate.917play.com.tw/download/flashplayer_32_sa.zip](http://asupdate.917play.com.tw/download/flashplayer_32_sa.zip) 14 | 15 | ### 摩爾莊園程式連結 16 | 17 | - 主程式 [http://mole.61.com.tw/Client.swf](http://mole.61.com.tw/Client.swf) 18 | 19 | 三個函式庫程式碼高度重疊,但仍有些許不同 20 | 21 | - 共同函式庫 [http://mole.61.com.tw/ClientCommonDLL.swf](http://mole.61.com.tw/ClientCommonDLL.swf) 22 | - 通訊函式庫 [http://mole.61.com.tw/ClientSocketDLL.swf](http://mole.61.com.tw/ClientSocketDLL.swf) 23 | - 應用函式庫 [http://mole.61.com.tw/ClientAppDLL.swf](http://mole.61.com.tw/ClientAppDLL.swf) 24 | 25 | ### 反編譯工具 26 | 27 | - [ffdec](https://github.com/jindrapetrik/jpexs-decompiler) 28 | 29 | Flash 反組譯工具 30 | 31 | - [decode-amf3.py](decode-amf3.py) 32 | 33 | swf 封裝許多 amf3 格式的二進位資料,轉成 JSON 方便閱讀與處理 34 | 35 | ### 流量分析工具 36 | 37 | - [WireShark](https://www.wireshark.org/download.html) 38 | 39 | - [摩爾莊園協定 dissector lua plugin for WireShark](dissector.lua) 40 | -------------------------------------------------------------------------------- /game/game.go: -------------------------------------------------------------------------------- 1 | package game 2 | 3 | import ( 4 | "crypto/md5" 5 | "encoding/binary" 6 | "fmt" 7 | 8 | cmd "github.com/mikucat0309/mole/command" 9 | "github.com/mikucat0309/mole/conn" 10 | ) 11 | 12 | type ( 13 | User uint32 14 | ) 15 | 16 | type GameConn struct { 17 | Conn *conn.MoleConn 18 | User uint32 19 | } 20 | 21 | type LoginGameData struct { 22 | ZZZ1 int16 23 | Token [16]byte 24 | SessionLen int32 25 | Session [16]byte 26 | ZZZ2 int32 27 | ZZZ3 [64]byte 28 | } 29 | 30 | func NewGameLoginData(session [16]byte) *LoginGameData { 31 | tmp := fmt.Sprintf("%dhAo crAzy B%d", binary.BigEndian.Uint32(session[10:14]), binary.BigEndian.Uint32(session[3:7])) 32 | token := (*[16]byte)([]byte(fmt.Sprintf("%x", md5.Sum([]byte(tmp)))[6:22])) 33 | return &LoginGameData{1, *token, int32(len(session)), session, 0, [64]byte{0x30}} 34 | } 35 | 36 | func GameLogin(user uint32, session [16]byte) (*GameConn, error) { 37 | c, err := conn.NewMoleConn("203.73.22.191:1201", user, true) 38 | if err != nil { 39 | return nil, err 40 | } 41 | c2 := &GameConn{ 42 | Conn: c, 43 | User: user, 44 | } 45 | _, err = c.SendCmd(cmd.LOGIN, NewGameLoginData(session)) 46 | return c2, err 47 | } 48 | -------------------------------------------------------------------------------- /login/login.go: -------------------------------------------------------------------------------- 1 | package login 2 | 3 | import ( 4 | "crypto/md5" 5 | "errors" 6 | "fmt" 7 | 8 | "github.com/mikucat0309/mole/conn" 9 | ) 10 | 11 | type LoginReq struct { 12 | Pwd [32]byte 13 | ZZZ1 int32 14 | ZZZ2 int32 15 | ZZZ3 int32 16 | Captcha [22]byte 17 | } 18 | 19 | func NewLoginReq(pwd [32]byte) *LoginReq { 20 | return &LoginReq{pwd, 0, 1, 0, [22]byte{}} 21 | } 22 | 23 | type LoginResp struct { 24 | Result int32 25 | Session [16]byte 26 | Errlen int32 27 | } 28 | 29 | const CMD_LOGIN = 103 30 | 31 | var loginErrMsg = map[int32]string{ 32 | 0: "Success", 33 | 1: "Incorrect password", 34 | 2: "Incorrect captcha", 35 | } 36 | 37 | func md5text(pwd string) [32]byte { 38 | hash1 := []byte(fmt.Sprintf("%x", md5.Sum([]byte(pwd)))) 39 | hash2 := []byte(fmt.Sprintf("%x", md5.Sum(hash1))) 40 | return *(*[32]byte)(hash2) 41 | } 42 | 43 | func Login(user uint32, pwd string) ([16]byte, error) { 44 | return LoginHash(user, md5text(pwd)) 45 | } 46 | 47 | func LoginHash(user uint32, pwd [32]byte) ([16]byte, error) { 48 | c, err := conn.NewMoleConn("203.73.22.200:8888", user, false) 49 | if err != nil { 50 | return [16]byte{}, err 51 | } 52 | req := NewLoginReq(pwd) 53 | resp := &LoginResp{} 54 | err = c.SendRecv(CMD_LOGIN, req, resp) 55 | if err != nil { 56 | return [16]byte{}, errors.New(loginErrMsg[resp.Result]) 57 | } 58 | c.Close() 59 | return resp.Session, nil 60 | } 61 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 摩爾:自動人形 (Mole: Automata) 2 | 3 | ## 功能 4 | 5 | - 餐廳 6 | - 製作新的料理 7 | - 收取完成的料理 8 | - 倒掉過期的料理 9 | 10 | ## 使用方式 11 | 12 | 重新命名 `template.env` 為 `.env` 並修改對應資訊 13 | 14 | | field | description | 15 | | ------ | --- | 16 | | `USER` | 帳號 | 17 | | `PASSWORD` | 密碼 | 18 | | `DISH_ID` | 料理 ID (請參照下方對照表) | 19 | 20 | 輸入指令運行本程式 21 | 22 | ```go 23 | go run .\cmd\main.go 24 | ``` 25 | 26 | ## 逆向工程 27 | 28 | 請見 [reverse/README.md](reverse/README.md) 29 | 30 | ## 料理 ID 對照表 31 | 32 | | 料理 ID | 料理名稱 | 料理 ID | 料理名稱 | 料理 ID | 料理名稱 | 33 | | ------- | -------- | ------- | -------- | ------- | -------- | 34 | | 1340001 | 清炒毛毛豆 | 1340002 | 醬爆雪頂菇 | 1340003 | 果凍花咖喱飯 | 35 | | 1340004 | 咕嚕果奶酥 | 1340005 | 咕唧蛋撻 | 1340006 | 藍莓彩羽湯 | 36 | | 1340007 | 陽光酥油肉鬆 | 1340008 | 開心果蔬餅 | 1340009 | 傑克南瓜酥 | 37 | | 1340010 | 串烤海琴花 | 1340011 | 蜜汁卡蘭花 | 1340012 | 尤尤什錦百燴 | 38 | | 1340013 | 摩雅霜降魚排 | 1340014 | 四季百花羹 | 1340015 | 驚奇松塔餅 | 39 | | 1340016 | 彩虹漿果燴蝶魚 | 1340017 | 拉姆小饅頭 | 1340018 | 神秘湖蟹蓉泡芙 | 40 | | 1340019 | 金槍魚彩菇披薩 | 1340020 | 梅森鮮果湯 | 1340021 | 玫瑰香蒸塔塔酥 | 41 | | 1340022 | 雪丁丁 | 1340023 | 荷香爽飲 | 1340024 | 豆香南瓜飯 | 42 | | 1340025 | 葡萄冰沙 | 1340026 | 七彩草莓霜淇淋 | 1340027 | 十二星座餅乾 | 43 | | 1340028 | 酸甜冰泥 | 1340029 | 雲朵松糕 | 1340030 | 愛心蛋蛋堡 | 44 | | 1340031 | 蜂蜜水果熱飲 | 1340032 | 黑胡椒沙朗牛排 | 1340033 | 胡蘿蔔蓋飯 | 45 | | 1340034 | 拉姆七彩沙拉 | 1340035 | 拉姆曲奇餅 | 1340036 | 拉姆鴨蛋麵 | 46 | | 1340037 | 麻辣小龍蝦 | 1340039 | 葡萄石榴派 | 1340040 | 七寶飯 | 47 | | 1340041 | 清爽薯片 | 1340042 | 濃情南瓜盅 | 1340043 | 果蔬蛋捲 | 48 | | 1340044 | 雙層巧克力蛋糕 | 1340045 | 水果飯糰 | 1340046 | 冰糖葫蘆 | 49 | | 1340048 | 小惡魔披薩 | 1340049 | 音符巧克力 | 1340050 | 月亮船優酪乳雪糕 | 50 | | 1340051 | 焦糖拉姆布丁 | 1340052 | 多彩粽子 | 1340053 | 繽紛土豆泥 | 51 | | 1340054 | 檸檬蛋糕 | 1340055 | 草莓冰爽碎碎冰 | 1340056 | 彩虹冰爽 | 52 | | 1340057 | 甜橙布丁冷飲 | 1340058 | 鮮蝦時蔬拼盤 | 1340059 | 黑糊糊粥 | 53 | | 1340060 | 多彩塔塔酥 | 1340061 | 摩摩蛋黃月餅 | 1340062 | 清爽布丁 | 54 | | 1340063 | 秘製小煎餅 | 1340064 | 水果豐收蛋糕 | 1340065 | 水蛋堡 | 55 | | 1340066 | 南瓜布丁 | 1340067 | 香濃薑湯 | 1340068 | 水果冰晶粽 | 56 | | 1340069 | 夏日清爽涼麵 | 1340070 | 燒烤拉姆 | 1340071 | 夏威夷冰飲 | 57 | | 1340072 | 摩摩蛋包飯 | 1340073 | 櫻花冰淇淋蛋糕 | 1340074 | 漿果糯米糍 | 58 | 59 | -------------------------------------------------------------------------------- /restaurant/innerstyle.go: -------------------------------------------------------------------------------- 1 | package restaurant 2 | 3 | type ( 4 | InnerStyleId uint32 5 | ) 6 | 7 | type InnerStyle struct { 8 | ID int 9 | Name string 10 | Stove int 11 | Table int 12 | DishTable int 13 | } 14 | 15 | var InnerStyles = map[InnerStyleId]*InnerStyle{ 16 | 1330004: { 17 | ID: 1330004, 18 | Name: "普拉內飾1", 19 | Stove: 3, 20 | Table: 3, 21 | DishTable: 2, 22 | }, 23 | 1330006: { 24 | ID: 1330006, 25 | Name: "普拉內飾2", 26 | Stove: 3, 27 | Table: 4, 28 | DishTable: 2, 29 | }, 30 | 1330009: { 31 | ID: 1330009, 32 | Name: "超拉內飾2", 33 | Stove: 3, 34 | Table: 4, 35 | DishTable: 2, 36 | }, 37 | 1330010: { 38 | ID: 1330010, 39 | Name: "普拉內飾3", 40 | Stove: 3, 41 | Table: 4, 42 | DishTable: 3, 43 | }, 44 | 1330011: { 45 | ID: 1330011, 46 | Name: "超拉內飾3", 47 | Stove: 3, 48 | Table: 4, 49 | DishTable: 3, 50 | }, 51 | 1330012: { 52 | ID: 1330012, 53 | Name: "普拉內飾4", 54 | Stove: 4, 55 | Table: 5, 56 | DishTable: 3, 57 | }, 58 | 1330013: { 59 | ID: 1330013, 60 | Name: "超拉內飾4", 61 | Stove: 4, 62 | Table: 5, 63 | DishTable: 3, 64 | }, 65 | 1330014: { 66 | ID: 1330014, 67 | Name: "石質內飾1", 68 | Stove: 4, 69 | Table: 4, 70 | DishTable: 3, 71 | }, 72 | 1330015: { 73 | ID: 1330015, 74 | Name: "石質內飾2", 75 | Stove: 6, 76 | Table: 6, 77 | DishTable: 4, 78 | }, 79 | 1330017: { 80 | ID: 1330017, 81 | Name: "普拉內飾5", 82 | Stove: 4, 83 | Table: 5, 84 | DishTable: 4, 85 | }, 86 | 1330018: { 87 | ID: 1330018, 88 | Name: "超拉內飾5", 89 | Stove: 4, 90 | Table: 5, 91 | DishTable: 4, 92 | }, 93 | 1330019: { 94 | ID: 1330019, 95 | Name: "石質內飾3", 96 | Stove: 4, 97 | Table: 5, 98 | DishTable: 4, 99 | }, 100 | 1330020: { 101 | ID: 1330020, 102 | Name: "石質內飾4", 103 | Stove: 7, 104 | Table: 7, 105 | DishTable: 4, 106 | }, 107 | 1330023: { 108 | ID: 1330023, 109 | Name: "騎士風格內飾(豪華版)", 110 | Stove: 7, 111 | Table: 8, 112 | DishTable: 6, 113 | }, 114 | 1330024: { 115 | ID: 1330024, 116 | Name: "騎士風格內飾(專業版)", 117 | Stove: 5, 118 | Table: 6, 119 | DishTable: 6, 120 | }, 121 | } 122 | -------------------------------------------------------------------------------- /cmd/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "log" 5 | "strconv" 6 | "time" 7 | 8 | "github.com/joho/godotenv" 9 | "github.com/mikucat0309/mole/game" 10 | "github.com/mikucat0309/mole/login" 11 | map_ "github.com/mikucat0309/mole/map" 12 | rest "github.com/mikucat0309/mole/restaurant" 13 | "github.com/mikucat0309/mole/util" 14 | ) 15 | 16 | func main() { 17 | envs, err := godotenv.Read() 18 | if err != nil { 19 | log.Fatal("讀取 .env 檔案失敗") 20 | } 21 | log.Printf("帳號: %s\n", envs["USER"]) 22 | user := util.UInt32(strconv.ParseUint(envs["USER"], 0, 32)) 23 | pwd := envs["PASSWORD"] 24 | dishID := rest.DishID(util.UInt32(strconv.ParseUint(envs["DISH_ID"], 0, 32))) 25 | for { 26 | session, err := login.Login(user, pwd) 27 | if err != nil { 28 | log.Fatalf("登入失敗: %v\n", err) 29 | } 30 | c, err := game.GameLogin(user, session) 31 | if err != nil { 32 | log.Fatalf("登入伺服器失敗: %v\n", err) 33 | } 34 | interval := restaurant(c, dishID) 35 | log.Printf("等待 %d 秒", interval) 36 | time.Sleep(interval * time.Second) 37 | } 38 | } 39 | 40 | func roundRange(i uint32, d uint32) uint32 { 41 | r := i % d 42 | if r == 0 { 43 | return i 44 | } 45 | return i - r + d 46 | } 47 | 48 | var eventAnswers = map[rest.EventID]rest.EventAnswer{ 49 | 1: 1, 50 | 2: 1, 51 | 3: 2, 52 | 4: 1, 53 | 5: 2, 54 | 6: 2, 55 | 7: 2, 56 | 8: 2, 57 | 100: 1, 58 | 200: 2, 59 | 201: 3, 60 | 202: 3, 61 | 203: 3, 62 | 204: 2, 63 | 205: 3, 64 | 206: 3, 65 | 207: 3, 66 | } 67 | 68 | func restaurant(c *game.GameConn, dishID rest.DishID) time.Duration { 69 | interval := rest.DishInfos[dishID].CompleteDuration 70 | 71 | map_.LeaveMap(c) 72 | log.Println("離開地圖") 73 | 74 | map_.EnterMap(c, map_.RESTARUNT) 75 | log.Println("進入餐廳") 76 | 77 | info, err := rest.GetInfo(c) 78 | if err != nil { 79 | log.Fatalf("獲取餐廳資訊失敗: %v", err) 80 | } 81 | log.Printf("內部裝潢 %s, %d 個瓦斯爐, %d 個上菜盤, %d 個用餐位置", info.InnerStyle.Name, info.InnerStyle.Stove, info.InnerStyle.DishTable, info.InnerStyle.Table) 82 | 83 | event, err := rest.GetEvent(c) 84 | if err == nil && event != 0 { 85 | log.Printf("解決事件 %d", event) 86 | rest.SolveEvent(c, eventAnswers[event]) 87 | } 88 | 89 | for _, stove := range info.Stoves { 90 | status := stove.Dish.Status() 91 | dishInfo := stove.Dish.Info() 92 | 93 | if status == rest.COOK_STATUS_PREPARE_1 || status == rest.COOK_STATUS_PREPARE_2 { 94 | rest.PrepareDish(c, &stove) 95 | log.Printf("瓦斯爐 %d 的 %s 開始料理, 剩餘 %d 秒", stove.Dish.Loc, dishInfo.Name, dishInfo.CompleteDuration) 96 | continue 97 | } 98 | 99 | if status == rest.COOK_STATUS_COOKING { 100 | remaining := dishInfo.CompleteDuration - stove.Dish.CookDuration 101 | log.Printf("瓦斯爐 %d 的 %s 正在料理, 剩餘 %d 秒", stove.Dish.Loc, dishInfo.Name, remaining) 102 | if roundRange(remaining, 60) < interval { 103 | interval = roundRange(remaining, 60) 104 | } 105 | continue 106 | } 107 | 108 | if status == rest.COOK_STATUS_COMPLETED { 109 | log.Printf("瓦斯爐 %d 的 %s 完成", stove.Dish.Loc, dishInfo.Name) 110 | err := rest.StoreDish(c, &stove) 111 | if err != nil { 112 | log.Printf("%v\n", err) 113 | continue 114 | } 115 | } else if status == rest.COOK_STATUS_EXPIRED { 116 | log.Printf("瓦斯爐 %d 的 %s 過期", stove.Dish.Loc, dishInfo.Name) 117 | rest.ClearDish(c, &stove) 118 | } 119 | 120 | dishInfo = rest.DishInfos[dishID] 121 | err := rest.MakeDish(c, &stove, dishID) 122 | if err != nil { 123 | log.Printf("%v\n", err) 124 | continue 125 | } 126 | rest.PrepareDish(c, &stove) 127 | log.Printf("瓦斯爐 %d 的 %s 開始料理, 剩餘 %d 秒", stove.Dish.Loc, dishInfo.Name, dishInfo.CompleteDuration) 128 | } 129 | return time.Duration(interval) 130 | } 131 | -------------------------------------------------------------------------------- /restaurant/dish_container.go: -------------------------------------------------------------------------------- 1 | package restaurant 2 | 3 | import ( 4 | "fmt" 5 | 6 | cmd "github.com/mikucat0309/mole/command" 7 | "github.com/mikucat0309/mole/game" 8 | ) 9 | 10 | type ( 11 | DishContainerLoc uint32 12 | CookStatus uint32 13 | ) 14 | 15 | type DishContainer struct { 16 | CookID CookID 17 | Loc DishContainerLoc 18 | Dish DishID 19 | Count uint32 20 | state uint32 21 | CookDuration uint32 22 | } 23 | 24 | const ( 25 | COOK_STATUS_EMPTY CookStatus = 0 26 | COOK_STATUS_PREPARE_1 CookStatus = 1 27 | COOK_STATUS_PREPARE_2 CookStatus = 2 28 | COOK_STATUS_COOKING CookStatus = 3 29 | COOK_STATUS_COMPLETED CookStatus = 4 30 | COOK_STATUS_EXPIRED CookStatus = 5 31 | ) 32 | 33 | type Stove struct { 34 | Dish *DishContainer 35 | } 36 | 37 | type DishTable struct { 38 | Dish *DishContainer 39 | } 40 | 41 | func (d *DishContainer) isEmpty() bool { 42 | return d.Count == 0 43 | } 44 | 45 | func (d *DishContainer) Info() *DishInfo { 46 | return DishInfos[d.Dish] 47 | } 48 | 49 | func (d *DishContainer) Status() CookStatus { 50 | if d.isEmpty() { 51 | return COOK_STATUS_EMPTY 52 | } 53 | info := d.Info() 54 | if d.state == 1 { 55 | return COOK_STATUS_PREPARE_1 56 | } 57 | if d.state == 2 { 58 | return COOK_STATUS_PREPARE_2 59 | } 60 | if d.CookDuration < info.CompleteDuration { 61 | return COOK_STATUS_COOKING 62 | } 63 | if d.CookDuration < info.CompleteDuration+info.ExpireDuration { 64 | return COOK_STATUS_COMPLETED 65 | } 66 | return COOK_STATUS_EXPIRED 67 | } 68 | 69 | type MakeDishData struct { 70 | Dish DishID 71 | Stove DishContainerLoc 72 | } 73 | 74 | type MakeDishRespData struct { 75 | Dish DishID 76 | Cook CookID 77 | Stove DishContainerLoc 78 | CookProg int32 79 | ZZZ1 int32 80 | } 81 | 82 | func MakeDish(c *game.GameConn, stove *Stove, dish DishID) (err error) { 83 | resp := &MakeDishRespData{} 84 | err = c.Conn.SendRecv(cmd.RESTAURANT_MAKE_FOOD, MakeDishData{dish, stove.Dish.Loc}, resp) 85 | stove.Dish.Dish = dish 86 | stove.Dish.CookID = resp.Cook 87 | stove.Dish.state = 1 88 | return 89 | } 90 | 91 | type PrepareDishData struct { 92 | Dish DishID 93 | Cook CookID 94 | } 95 | 96 | func PrepareDish(c *game.GameConn, stove *Stove) (err error) { 97 | if stove.Dish.state == 1 { 98 | _, err = c.Conn.SendCmd(cmd.RESTAURANT_PREPARE_FOOD, PrepareDishData{stove.Dish.Dish, stove.Dish.CookID}) 99 | stove.Dish.state = 2 100 | } 101 | if stove.Dish.state == 2 { 102 | _, err = c.Conn.SendCmd(cmd.RESTAURANT_PREPARE_FOOD, PrepareDishData{stove.Dish.Dish, stove.Dish.CookID}) 103 | stove.Dish.state = 3 104 | stove.Dish.CookDuration = 0 105 | } 106 | return 107 | } 108 | 109 | type StoreDishData struct { 110 | Dish DishID 111 | Cook CookID 112 | Stove DishContainerLoc 113 | DishTable DishContainerLoc 114 | } 115 | 116 | func StoreDish(c *game.GameConn, stove *Stove) (err error) { 117 | table := findTargetDishtable(info.DishTables, stove.Dish.Dish) 118 | if table == nil { 119 | return fmt.Errorf("沒有多餘的上菜盤可以放置新料理") 120 | } 121 | _, err = c.Conn.SendCmd(cmd.RESTAURANT_STORE_FOOD, StoreDishData{stove.Dish.Dish, stove.Dish.CookID, stove.Dish.Loc, table.Dish.Loc}) 122 | if err != nil { 123 | return 124 | } 125 | stove.Dish = &DishContainer{0, stove.Dish.Loc, 0, 0, 0, 0} 126 | return 127 | } 128 | 129 | func findTargetDishtable(tables []DishTable, dish DishID) *DishTable { 130 | for k := range tables { 131 | if tables[k].Dish.Dish == dish { 132 | return &tables[k] 133 | } 134 | } 135 | for k := range tables { 136 | if tables[k].Dish.Status() == COOK_STATUS_EMPTY { 137 | return &tables[k] 138 | } 139 | } 140 | return nil 141 | } 142 | 143 | type ClearDishData struct { 144 | Dish DishID 145 | Cook CookID 146 | Stove DishContainerLoc 147 | } 148 | 149 | func ClearDish(c *game.GameConn, stove *Stove) (err error) { 150 | _, err = c.Conn.SendCmd(cmd.RESTAURANT_CLEAR_FOOD, ClearDishData{stove.Dish.Dish, stove.Dish.CookID, stove.Dish.Loc}) 151 | if err != nil { 152 | return 153 | } 154 | stove.Dish = &DishContainer{0, stove.Dish.Loc, 0, 0, 0, 0} 155 | return 156 | } 157 | -------------------------------------------------------------------------------- /restaurant/restaurant.go: -------------------------------------------------------------------------------- 1 | package restaurant 2 | 3 | import ( 4 | "bytes" 5 | "encoding/binary" 6 | 7 | cmd "github.com/mikucat0309/mole/command" 8 | "github.com/mikucat0309/mole/game" 9 | map_ "github.com/mikucat0309/mole/map" 10 | ) 11 | 12 | type ( 13 | CookID uint32 14 | ) 15 | 16 | type Info struct { 17 | User uint32 18 | Serial uint32 19 | Grid uint32 20 | Exp uint32 21 | Money uint32 22 | Favor uint32 23 | Type uint32 24 | Level uint32 25 | AllFood uint32 26 | InnerStyle *InnerStyle 27 | Style uint32 28 | Name string 29 | PeopMoney uint32 30 | StarCount uint32 31 | Stoves []Stove 32 | DishTables []DishTable 33 | Employees []Employee 34 | } 35 | 36 | type Employee struct { 37 | User game.User 38 | ID uint32 39 | Name string 40 | Color uint32 41 | Level uint32 42 | Skill uint32 43 | EmpLevel uint32 44 | EmpMoney uint32 45 | EndTime uint32 46 | TimeLimit uint32 47 | } 48 | 49 | var info *Info 50 | 51 | type GetInfoData struct { 52 | User uint32 53 | MapType map_.MapType 54 | } 55 | 56 | func GetInfo(c *game.GameConn) (info_ *Info, err error) { 57 | info = &Info{} 58 | resp, err := c.Conn.SendCmd(cmd.RESTAURANT_GET_INFO, GetInfoData{c.User, map_.RESTARUNT}) 59 | reader := bytes.NewReader(resp) 60 | 61 | var innerStyleId InnerStyleId 62 | strBuf := make([]byte, 16) 63 | var count uint32 64 | 65 | binary.Read(reader, binary.BigEndian, &info.User) 66 | binary.Read(reader, binary.BigEndian, &info.Serial) 67 | binary.Read(reader, binary.BigEndian, &info.Grid) 68 | binary.Read(reader, binary.BigEndian, &info.Exp) 69 | binary.Read(reader, binary.BigEndian, &info.Money) 70 | binary.Read(reader, binary.BigEndian, &info.Favor) 71 | binary.Read(reader, binary.BigEndian, &info.Type) 72 | binary.Read(reader, binary.BigEndian, &info.Level) 73 | binary.Read(reader, binary.BigEndian, &info.AllFood) 74 | binary.Read(reader, binary.BigEndian, &innerStyleId) 75 | info.InnerStyle = InnerStyles[innerStyleId] 76 | binary.Read(reader, binary.BigEndian, &info.Style) 77 | binary.Read(reader, binary.BigEndian, strBuf) 78 | info.Name = string(strBuf) 79 | binary.Read(reader, binary.BigEndian, &info.PeopMoney) 80 | binary.Read(reader, binary.BigEndian, &info.StarCount) 81 | 82 | info.Stoves = make([]Stove, info.InnerStyle.Stove) 83 | info.DishTables = make([]DishTable, info.InnerStyle.DishTable) 84 | for k := range info.Stoves { 85 | info.Stoves[k].Dish = &DishContainer{0, DishContainerLoc(k + 1), 0, 0, 0, 0} 86 | } 87 | for k := range info.DishTables { 88 | info.DishTables[k].Dish = &DishContainer{0, DishContainerLoc(k + 51), 0, 0, 0, 0} 89 | } 90 | binary.Read(reader, binary.BigEndian, &count) 91 | for i := 0; i < int(count); i++ { 92 | container := &DishContainer{} 93 | binary.Read(reader, binary.BigEndian, &container.Loc) 94 | binary.Read(reader, binary.BigEndian, &container.Dish) 95 | binary.Read(reader, binary.BigEndian, &container.CookID) 96 | binary.Read(reader, binary.BigEndian, &container.Count) 97 | binary.Read(reader, binary.BigEndian, &container.state) 98 | binary.Read(reader, binary.BigEndian, &container.CookDuration) 99 | if container.Loc < 10 { 100 | info.Stoves[container.Loc-1].Dish = container 101 | } else { 102 | info.DishTables[container.Loc-51].Dish = container 103 | } 104 | } 105 | 106 | binary.Read(reader, binary.BigEndian, &count) 107 | employees := make([]Employee, count) 108 | for i := 0; i < int(count); i++ { 109 | binary.Read(reader, binary.BigEndian, &employees[i].User) 110 | binary.Read(reader, binary.BigEndian, &employees[i].ID) 111 | binary.Read(reader, binary.BigEndian, strBuf) 112 | employees[i].Name = string(strBuf) 113 | binary.Read(reader, binary.BigEndian, &employees[i].Color) 114 | binary.Read(reader, binary.BigEndian, &employees[i].Level) 115 | binary.Read(reader, binary.BigEndian, &employees[i].Skill) 116 | binary.Read(reader, binary.BigEndian, &employees[i].EmpLevel) 117 | binary.Read(reader, binary.BigEndian, &employees[i].EmpMoney) 118 | binary.Read(reader, binary.BigEndian, &employees[i].EndTime) 119 | binary.Read(reader, binary.BigEndian, &employees[i].TimeLimit) 120 | } 121 | info.Employees = employees 122 | info_ = info 123 | return 124 | } 125 | -------------------------------------------------------------------------------- /conn/connection.go: -------------------------------------------------------------------------------- 1 | package conn 2 | 3 | import ( 4 | "bytes" 5 | "encoding/binary" 6 | "fmt" 7 | "io" 8 | "net" 9 | "time" 10 | ) 11 | 12 | const HEADER_LENGTH uint32 = 0x11 13 | const LOGIN = 0xc9 14 | 15 | var errorMsg = map[int32]string{ 16 | -10004: "你填入的米米號不存在!", 17 | -10012: "使用了非法語言", 18 | -10023: "你投的鮮花或泥巴已經超過了上限,明天再來吧!", 19 | -10025: "這個小摩爾好像不歡迎你哦!", 20 | -10026: "這個小摩爾在你的黑名單裡哦,你不能加他為好友呢!", 21 | -10512: "這件寶貝現在還不能送給你哦!", 22 | -10913: "今天你已經不能灑水或施肥\n了,休息下明天再來吧!", 23 | -10918: "你今天不能再給SMC嚮導投票了!", 24 | -10972: "你今天已經創建過一個派對了,明天再來吧!", 25 | -10991: "你今天不能再送福氣了!", 26 | -11002: "數據庫出錯!", 27 | -11105: "這個位置沒有蛋哦!", 28 | -11111: "你的拉姆表現很棒!明天一定要再來!只要堅持鍛煉5天,我會送你一台拉姆跑步機!", 29 | -11117: "你的豆豆不足哦!", 30 | -11119: "兌換物品數量不足哦!", 31 | -11130: "你的寵物已經超過了上限!", 32 | -11140: "你的拉姆在拉姆運動會上沒有獲得任何一項參賽勳章,不能領取運動獎杯哦!明年繼續努力吧!", 33 | -11170: "你已經有五筆存款!", 34 | -11171: "咳咳,我可不是零錢罐,低於1000摩爾豆的存款我是不接受的哦!請重新輸入存款金額...", 35 | -11172: "這筆存款不可以中途取出哦!", 36 | -11173: "這筆存款不存在哦!", 37 | -11174: "這筆存款已存在哦!", 38 | -11175: "無效的存款期限值!", 39 | -11190: "你今天賣的東西超過上限啦,明天再來吧!", 40 | -11201: "你的小屋家具超過上限!", 41 | -11301: "你填入的米米號不存在!", 42 | -11311: "這棵毛毛樹今天已經有了\n充足的水分和養料了,請明天再來吧!", 43 | -11313: "他今天不能再接受更多的投票了!", 44 | -11810: "伺服器上的派對已滿,你可以去其他伺服器試試哦!", 45 | -12503: "你已經加入這個班級了,趕快進入班級看看吧!", 46 | -12504: "班級不存在喔!", 47 | -12523: "果實已經被摘取過啦!", 48 | -12526: "這裡的動物還沒長大哦,你還不能收獲它們!", 49 | -12530: "目前魚塘已經被鎖了,你釣不到任何魚哦!", 50 | -12531: "你今天已經釣過魚了,不能太貪心哦,明天再來吧!", 51 | -12535: "你的牧場太擁擠了,已經不能再養更多的動物了!", 52 | -12536: "你的魚塘太擁擠了,已經不能再養更多的魚了!", 53 | -12537: "你捕捉了太多這種小動物,不能再捕捉了!!", 54 | -12538: "飼料房裡不能放下這麼多飼料哦!", 55 | -12539: "你已經領過了獎品!", 56 | -12540: "班級獎品已經領過了!", 57 | -12543: "你已經報過名了!", 58 | -12544: "已經接了任務!", 59 | -12545: "還沒接任務!", 60 | -12546: "已經完成任務!", 61 | -12548: "對方分數太低,不能PK哦!", 62 | -12569: "已經擁有了這輛車", 63 | -12582: "太多人孵過了這個蛋啦!", 64 | -12583: "你今天已經孵過蛋啦,讓別的小摩爾過來幫忙吧!", 65 | -12591: "這個蛋已經快要孵化了,不能再孵了哦!", 66 | -12598: "我這邊已經賣光了,下個整點再來吧!", 67 | -12599: "你已經領過鈴鐺了!", 68 | -12600: "牧場飼養的昆蟲達到上限!", 69 | -12602: "牧場中只能有一個菲尼克斯!", 70 | -12603: "牧場中養殖該類物種超過上限!", 71 | -12604: "\t這棵植物被授粉超過上限了!", 72 | -12605: "\t這棵植物還不能授粉!", 73 | -12606: "\t你這隻蝴蝶今天已經太疲倦啦!", 74 | -12607: "\t你身上已經沒有禮物了,快去聖誕屋領取後再來贈送吧!", 75 | -12609: "\t\t你的壁爐中還沒有禮物呢,給別人送上一份禮物去吧,說不定你也會收到驚喜的!", 76 | -12610: "你今天已經得到太多能量星啦,明天再來吧!", 77 | -12611: "該植物狀態異常,無法進行施肥哦!", 78 | -12612: "你好像還沒有化肥哦,快去梅森那裡看看吧!", 79 | -12613: "這棵植物今天再施肥就會脫水了,要合理使用化肥!", 80 | -12615: "\t你的拉姆已經擁有這個物品啦!", 81 | -12616: "你的拉姆還沒有學完課程,或未通過考試哦!", 82 | -12618: "你今天已經抽獎超過十次了,不能貪多哦!", 83 | -12619: "你今天已經中獎10次了,運氣不錯,但不能貪多哦!", 84 | -12628: "你的拉姆已經是第五階段了哦!", 85 | -12629: "你的拉姆正在技能學習當中哦!", 86 | -12634: "你的母奶牛今天已經擠過奶囉!明天再來看看吧!", 87 | -12635: "你的母奶牛已經擠過 5 次奶啦!不能再擠奶了喲!", 88 | -12638: "你的菜吃完了!", 89 | -12639: "你的菜正在做!", 90 | -12640: "沒有這道菜!", 91 | -12641: "僱傭的僱員太多了!不能再僱傭了!", 92 | -12642: "菜的數量到達上限!", 93 | -12643: "不是系統拉姆!", 94 | -12644: "菜還沒煮熟!", 95 | -12645: "所有服務員都被解僱了,吃不了菜!", 96 | -12648: "這道菜已經糊了!", 97 | -12656: "你沒有足夠的食材做這道菜!", 98 | -12674: "你已經擁有卡牌冊了,不能再次領取了哦。", 99 | -12682: "你用外掛,以為我不知道?小心封你號哦!下次不能再這樣啦!", 100 | -12683: "你今天已經不能再購買這個物品了,請明天再來吧!", 101 | -12690: "你每天最多能獲得200個火焰紋章哦!明天再過來吧!", 102 | -12712: "現在已經不能加課了,完成今天的教學安排準備考試吧!", 103 | -12718: "現在到了中間休息時間,耐心等待下一輪競猜開始吧!", 104 | -12719: "這一輪你已經猜過了,耐心等待結果吧!", 105 | -12720: "今天已經聯誼過三次了,學生已經很累啦 ,明天再來吧。", 106 | -12721: "今天已經和這間教室的學生聯誼過了,去別人的教室看看吧。", 107 | -12722: "你還沒有招收學生哦,去拉姆教導處招收學生以後再過來吧。", 108 | -12723: "兌換的數量不夠哦!", 109 | -12724: "你今天已經給他送過苞子花囉!一天只能給一位摩爾送出一個苞子花哦!", 110 | -12725: "你今天已經送出太多的苞子花囉!請明天再來贈送吧!", 111 | -12736: "這隻動物已經吃了太多啦,明天再過來餵它吧。", 112 | -12737: "你還沒有快快長脆脆酥,快去用點點豆買一些吧。", 113 | -12741: "捕獲的聖光獸數量已經太多了!", 114 | -12758: "這個天使已經成熟了,不能使用這個道具!", 115 | -12759: "這個道具一個天使一天只能使用一次哦!", 116 | -12764: "\t這個天使一定可以發生變異的,好好期待吧~", 117 | -12765: "這隻天使已經變異啦,不需要再使用這個道具了。", 118 | -12768: "這個天使的星級比較高哦,需要使用更高級的道具才能生效。", 119 | -12769: "這個天使的變異機率已經提升過啦,不能再次使用道具了。", 120 | -12777: "你的精力是滿的哦,不能再次使用道具了。", 121 | -16020: "留言板上已經貼滿了留言!", 122 | -40001: "你的米米號不存在!", 123 | -40002: "這個神奇密碼是錯誤的,再試試吧!", 124 | -40003: "這個神奇密碼是錯誤的,再試試吧!", 125 | -40004: "你的神奇密碼已經過了有效期了!", 126 | -40005: "這個神奇密碼已經無效啦!", 127 | -40006: "這個神奇密碼已經被使用過啦!", 128 | -40007: "這個神奇密碼是錯誤的,再試試吧!", 129 | -40008: "這個神奇密碼是錯誤的,再試試吧!", 130 | -40009: "寶箱裡的寶貝你已經都有啦!不能再擁有了哦!", 131 | -40010: "這個神奇密碼是錯誤的,再試試吧!", 132 | -40011: "寶箱好像有點問題喲!稍等一會再來試試吧!", 133 | -51001: "這個禮物沒辦法給你喔!!", 134 | -51002: "你輸入的神奇密碼不存在哦,檢查看看是不是輸入錯誤了呢?", 135 | -51003: "你輸入的神奇密碼還沒有被開啟,請你撥打客服熱線查詢哦!", 136 | -51004: "你輸入的神奇密碼不在有效期內,請你撥打客服熱線查詢哦!", 137 | -51005: "你輸入的神奇密碼被凍結,請你撥打客服熱線查詢哦!", 138 | -51006: "你輸入的神奇密碼已經使用過,無法兌換哦!", 139 | -51007: "兌換失敗!", 140 | -51008: "你的神奇密碼暫時不能使用哦!", 141 | -51009: "領取物品達到上限!", 142 | -51010: "一個號只能用一個兌換碼!", 143 | -51100: "你輸入的神奇密碼不是在這裡兌換哦,請你去問問其地方看看吧!", 144 | -52013: "這件寶貝已經購買完了哦!", 145 | -52015: "你已經擁有這件物品,不要浪費摩爾金豆喲!", 146 | -52016: "你已經擁有這件商品或這套商品某一部分,為避免重復,請重新選擇或單件購買!", 147 | -52017: "你已經擁有這件商品或這套商品某一部分,為避免重復,請重新選擇或單件購買!", 148 | -52019: "你已經擁有這件物品,不要浪費摩爾金豆喲!", 149 | -52021: "你已經擁有這件物品,不要浪費摩爾金豆喲!", 150 | -52105: "真可惜,你的金豆不足!", 151 | -52205: "真可惜,你的摩爾金豆不足!", 152 | -100001: "你不能在這個場景變身!", 153 | -100002: "今天你已經兌換了許多禮物,不可以再兌換了哦,請你明天再來吧!", 154 | -100003: "你的好朋友已經擁有太多這樣禮品了,你可以選擇其它禮品送他!", 155 | -100004: "你已經領取過本月的SMC工資了,下個月再來吧!", 156 | -100012: "今天你得到太多摩爾豆了!", 157 | -100020: "你還沒有報名,快去火神山腳下報名吧!", 158 | -100024: "你已經領過了,不要太貪心哦!", 159 | -100025: "你已經領過了,不要太貪心哦!", 160 | -100030: "你真是個充滿戰鬥力的小摩爾啊!可是,今天已經挑戰超過30次了,休息下明天再來吧!", 161 | -100031: "今天你已經拿了很多卡片了,趕快去和其他隊的隊員交換吧!", 162 | -100032: "卡牌不能匹配!", 163 | -100034: "不能購買該物品!", 164 | -100042: "你今天已經領了2隻小羊了,記得好好照顧它們哦!", 165 | -100046: "拉姆已經回家了!", 166 | -100047: "今天已經送了太多!", 167 | -100048: "你今天已經送了太多禮物啦,歇一歇,明天再來吧!", 168 | -100053: "你還沒有參賽哦!", 169 | -100055: "你沒有足夠的螢火草!", 170 | -100056: "不能邀請你的好友到飛船上!", 171 | -100057: "你還沒有通過SMC駕駛員考試哦!", 172 | -100059: "不能太貪心哦,你已經領取過摩爾豆的獎勵了!", 173 | -100060: "為班級貢獻300分以上會有特殊獎勵哦,下次記得踴躍參加哦!", 174 | -100061: "你不是班長哦,只有班長才可以領取班級榮譽獎勵哦!", 175 | -100063: "不能太貪心哦,你已經領取過了!", 176 | -100066: "你還沒有超級拉姆哦!", 177 | -100067: "這個合成機的位置正在使用哦!", 178 | -100069: "百寶箱裡的材料還不夠加工需求哦,再仔細看一下吧。", 179 | -100071: "今天已經很辛苦了,明天繼續來合成吧!", 180 | -100072: "每次只能使用一個加工機的製作位置哦!", 181 | -100075: "你的糖果太多啦!糖果籃子裡最多只能裝滿200顆糖果哦!", 182 | -100078: "你已經做過此次問卷調查!", 183 | -100079: "你的超級拉姆正在彩虹姐姐那裡托管,所以不能召喚過來哦!", 184 | -100080: "你沒有漁網!", 185 | -100081: "你的漁網太破了,不能用了!", 186 | -100082: "你已經有漁網了!", 187 | -100085: "用戶的糖果不夠!", 188 | -100086: "你今天已經拿了5次糖果了!", 189 | -100090: "你的超級拉姆今天已經修理時光門5次啦,休息一下吧!", 190 | -100092: "每次查詢最多10個,超過了這個限制!", 191 | -100094: "你不能領取這件物品哦!", 192 | -100096: "你的養殖級別不夠!", 193 | -100097: "已經關門啦,下次再來吧!", 194 | -100101: "你已經show的太累了,明天再來吧!", 195 | -100102: "你今天已經買了很多了,明天再來吧!", 196 | -100104: "這個位置已經有蛋啦!", 197 | -100110: "已經有人在跳舞了!", 198 | -100112: "你已經釣了很多魚了,保持生態平衡,明天再來吧!", 199 | -100114: "你今天撿的錢夠多了!", 200 | -100115: "在你猶豫期間,這件年貨已經被別人搶購啦!機不可失,失不再來喲!", 201 | -100116: "你今天從別人家釣了太多的魚!", 202 | -100117: "你的精力真的太充沛了!但是年貨可是有限的!明天再來當攤主吧!", 203 | -100118: "\t你今天已經拿的太多了,明天再來吧!", 204 | -100121: "\t你已經擁有這個腳印啦!", 205 | -100122: "你的超級拉姆正在上課,所以不能召喚過來哦!", 206 | -100124: "今天已經索取很多線索了,自己動動腦筋吧!", 207 | -100125: "你還有任務沒完成,暫時不能接這個任務哦!", 208 | -100126: "你還沒有車庫,快去交通署找貝塔吧!", 209 | -100127: "你今天搬石頭已達到上限了,多多休息,改天再來吧!", 210 | -100129: "企鵝爸爸已經為你的企鵝蛋孵化過啦,明天再來吧!", 211 | -100144: "學會小水滴、小火苗、小樹苗技能後,再來領取禮包吧!", 212 | -100145: "這週你已經領取過該禮物了,不能太貪心哦!", 213 | -100150: "你的拉姆生病了,趕緊帶它去拉姆醫院看病吧!", 214 | -100166: "你拉姆現在狀態很不好,帶它回去吃點東西,洗個澡,然後再過來吧。", 215 | -100170: "你已經擁有土地證了!不能再領取了喲!", 216 | -100171: "今天發放的土地證到達上限了!明天再來看看吧!", 217 | -100172: "你還沒有土地證喲!", 218 | -100173: "今天開放時間已經過了!明天再來看看吧!", 219 | -100174: "你的餐廳不存在!", 220 | -100175: "這不是你的餐廳,此功能無效!", 221 | -100176: "你已經有餐廳了!", 222 | -100177: "你還沒有餐廳!", 223 | -100178: "這個餐廳不是你的!", 224 | -100179: "你的拉姆已經被僱傭了!", 225 | -100180: "你的餐廳等級太低了!", 226 | -100181: "沒有位置了!", 227 | -100182: "現在營業時間已經過了,快去好好休息吧!", 228 | -100185: "這套房型或者內部裝潢現在還不能建設哦。", 229 | -100186: "你還沒有達到這套房型或者內部裝潢的解鎖條件!", 230 | -100189: "拉姆沒有成長哦,快速成長溫泉的力量每天只能發動一次呢,明天再來試試吧!", 231 | -100197: "你已經拿了太多這個東西了", 232 | -100199: "你的操作不對哦!沒有獲得獎品!", 233 | -100202: "你已經領取過大禮包了!", 234 | -100203: "你的摩爾等級不夠,不能領取這個任務!", 235 | -100208: "現在已經放學了,明天再來上課吧!", 236 | -100216: "這個蛋已經被別人領走了,去別的地方找找看吧!", 237 | -100312: "你還沒有把圖片拼合完成,繼續調查吧!", 238 | -100313: "你已經領取過這個獎勵了,試著解開其他謎團吧!", 239 | -100327: "你今天還沒玩遊戲哦,趕快去玩吧!", 240 | -100353: "支配力達到最大 ", 241 | -100354: "你已經領取過這個獎勵了 ", 242 | -100361: "摩靈背包滿了!", 243 | -100363: "戰鬥已經結束", 244 | -100364: "不在活動時間內", 245 | -101117: "你的摩爾豆不夠囉!", 246 | } 247 | 248 | type Packet struct { 249 | Header *Header 250 | Data []byte 251 | } 252 | type Header struct { 253 | Len uint32 254 | Nonce uint8 255 | Cmd int32 256 | User uint32 257 | ErrCode int32 258 | } 259 | 260 | type MoleConn struct { 261 | conn net.Conn 262 | nonce int 263 | user uint32 264 | respChan map[int32](chan Packet) 265 | encrypt bool 266 | quit chan bool 267 | } 268 | 269 | func CRC(data []byte) int { 270 | var c byte = 0 271 | for _, v := range data { 272 | c = (c ^ v) & 255 273 | } 274 | return int(c) 275 | } 276 | 277 | func NewMoleConn(host string, user uint32, encrypt bool) (*MoleConn, error) { 278 | tcpconn, err := net.Dial("tcp", host) 279 | if err != nil { 280 | return nil, err 281 | } 282 | quit := make(chan bool, 1) 283 | moleconn := &MoleConn{ 284 | conn: tcpconn, 285 | user: user, 286 | respChan: make(map[int32](chan Packet)), 287 | quit: quit, 288 | nonce: 65, 289 | encrypt: encrypt, 290 | } 291 | go moleconn.receive() 292 | return moleconn, nil 293 | } 294 | 295 | func (c *MoleConn) receive() { 296 | for { 297 | select { 298 | case <-c.quit: 299 | return 300 | default: 301 | hdr, err := c.readHdr() 302 | if err != nil { 303 | continue 304 | } 305 | resp := make([]byte, hdr.Len-HEADER_LENGTH) 306 | _, err = io.ReadFull(c.conn, resp) 307 | if err != nil { 308 | continue 309 | } 310 | // log.Printf("[socket] received %x\n", resp) 311 | if channel, ok := c.respChan[hdr.Cmd]; ok { 312 | channel <- Packet{hdr, resp} 313 | delete(c.respChan, hdr.Cmd) 314 | } 315 | } 316 | } 317 | } 318 | 319 | func (c *MoleConn) Close() error { 320 | c.quit <- true 321 | return c.conn.Close() 322 | } 323 | 324 | var key = []byte("^FStx,wl6NquAVRF@f%6\x00") 325 | var keylen = len(key) 326 | 327 | func encrypt(plain []byte) []byte { 328 | // log.Printf("[encrypt] plain[%d]: %x\n", len(plain), plain) 329 | plen := len(plain) 330 | cipher := make([]byte, plen+1) 331 | for i, ki := 0, 0; i < plen; i++ { 332 | cipher[i] = plain[i] ^ key[ki%keylen] 333 | ki++ 334 | if ki == 22 { 335 | ki = 0 336 | } 337 | } 338 | for i := plen; i > 0; i-- { 339 | cipher[i] = cipher[i] | (cipher[i-1] >> 3) 340 | cipher[i-1] = byte((uint(cipher[i-1]) << 5) % 256) 341 | } 342 | cipher[0] = cipher[0] | 3 343 | // log.Printf("[encrypt] cipher[%d]: %x\n", len(cipher), cipher) 344 | return cipher 345 | } 346 | 347 | func decrypt(cipher []byte) []byte { 348 | // log.Printf("[decrypt] cipher[%d]: %x\n", len(cipher), cipher) 349 | plen := len(cipher) - 1 350 | plain := make([]byte, plen) 351 | ki := 0 352 | for i := 0; i < plen; i++ { 353 | plain[i] = byte(uint(cipher[i]>>5) | (uint(cipher[i+1])<<3)%256) 354 | plain[i] = plain[i] ^ key[ki%keylen] 355 | ki++ 356 | if ki == 22 { 357 | ki = 0 358 | } 359 | } 360 | // log.Printf("[decrypt] plain[%d]: %x\n", len(plain), plain) 361 | return plain 362 | } 363 | 364 | func (c *MoleConn) updateNonce(len int, cmd int32, data []byte) { 365 | if cmd == LOGIN { 366 | return 367 | } 368 | tmp := c.nonce - (c.nonce / 7) + 147 + (len % 21) + (int(cmd) % 13) + CRC(data) 369 | c.nonce = tmp % 256 370 | } 371 | 372 | func (c *MoleConn) readHdr() (*Header, error) { 373 | hdr := &Header{} 374 | err := binary.Read(c.conn, binary.BigEndian, hdr) 375 | return hdr, err 376 | } 377 | 378 | func (c *MoleConn) sendHdr(hdr *Header, req any) ([]byte, error) { 379 | channel := make(chan Packet, 1) 380 | c.respChan[hdr.Cmd] = channel 381 | binary.Write(c.conn, binary.BigEndian, *hdr) 382 | binary.Write(c.conn, binary.BigEndian, req) 383 | packet := <-channel 384 | if packet.Header.ErrCode != 0 { 385 | return packet.Data, fmt.Errorf("mole error: %s", errorMsg[packet.Header.ErrCode]) 386 | } 387 | return packet.Data, nil 388 | } 389 | 390 | func (c *MoleConn) SendCmd(cmd int32, req any) ([]byte, error) { 391 | var hdr *Header 392 | if c.encrypt { 393 | buf := &bytes.Buffer{} 394 | binary.Write(buf, binary.BigEndian, req) 395 | c.updateNonce(17+buf.Len(), cmd, buf.Bytes()) 396 | hdr = &Header{ 397 | Len: uint32(buf.Len() + 1 + 17), 398 | Nonce: byte(c.nonce), 399 | Cmd: cmd, 400 | User: c.user, 401 | ErrCode: 0, 402 | } 403 | req = encrypt(buf.Bytes()) 404 | } else { 405 | hdr = &Header{uint32(binary.Size(req)) + HEADER_LENGTH, 1, cmd, c.user, 0} 406 | } 407 | data, err := c.sendHdr(hdr, req) 408 | if err != nil { 409 | return nil, err 410 | } 411 | if c.encrypt { 412 | data = decrypt(data) 413 | } 414 | time.Sleep(200 * time.Millisecond) 415 | return data, nil 416 | } 417 | 418 | func (c *MoleConn) SendRecv(cmd int32, req any, resp any) error { 419 | data, err := c.SendCmd(cmd, req) 420 | if err != nil { 421 | return err 422 | } 423 | err = binary.Read(bytes.NewReader(data), binary.BigEndian, resp) 424 | return err 425 | } 426 | 427 | func (c *MoleConn) SendHdrRecv(hdr *Header, req any, resp any) error { 428 | data, err := c.sendHdr(hdr, req) 429 | if err != nil { 430 | return err 431 | } 432 | err = binary.Read(bytes.NewReader(data), binary.BigEndian, resp) 433 | return err 434 | } 435 | -------------------------------------------------------------------------------- /restaurant/dish.go: -------------------------------------------------------------------------------- 1 | package restaurant 2 | 3 | type ( 4 | DishID uint32 5 | ) 6 | 7 | type DishInfo struct { 8 | ID DishID 9 | Name string 10 | SellPrice uint32 11 | CompleteDuration uint32 12 | ExpireDuration uint32 13 | } 14 | 15 | var DishInfos = map[DishID]*DishInfo{ 16 | 1340001: { 17 | ID: 1340001, 18 | Name: "清炒毛毛豆", 19 | SellPrice: 10, 20 | CompleteDuration: 300, 21 | ExpireDuration: 600, 22 | }, 23 | 1340002: { 24 | ID: 1340002, 25 | Name: "醬爆雪頂菇", 26 | SellPrice: 3, 27 | CompleteDuration: 300, 28 | ExpireDuration: 600, 29 | }, 30 | 1340003: { 31 | ID: 1340003, 32 | Name: "果凍花咖喱飯", 33 | SellPrice: 2, 34 | CompleteDuration: 86400, 35 | ExpireDuration: 172800, 36 | }, 37 | 1340004: { 38 | ID: 1340004, 39 | Name: "咕嚕果奶酥", 40 | SellPrice: 2, 41 | CompleteDuration: 43200, 42 | ExpireDuration: 86400, 43 | }, 44 | 1340005: { 45 | ID: 1340005, 46 | Name: "咕唧蛋撻", 47 | SellPrice: 3, 48 | CompleteDuration: 900, 49 | ExpireDuration: 1800, 50 | }, 51 | 1340006: { 52 | ID: 1340006, 53 | Name: "藍莓彩羽湯", 54 | SellPrice: 3, 55 | CompleteDuration: 2160, 56 | ExpireDuration: 4320, 57 | }, 58 | 1340007: { 59 | ID: 1340007, 60 | Name: "陽光酥油肉鬆", 61 | SellPrice: 2, 62 | CompleteDuration: 7200, 63 | ExpireDuration: 144000, 64 | }, 65 | 1340008: { 66 | ID: 1340008, 67 | Name: "開心果蔬餅", 68 | SellPrice: 2, 69 | CompleteDuration: 900, 70 | ExpireDuration: 1800, 71 | }, 72 | 1340009: { 73 | ID: 1340009, 74 | Name: "傑克南瓜酥", 75 | SellPrice: 3, 76 | CompleteDuration: 172800, 77 | ExpireDuration: 345600, 78 | }, 79 | 1340022: { 80 | ID: 1340022, 81 | Name: "雪丁丁", 82 | SellPrice: 10, 83 | CompleteDuration: 43200, 84 | ExpireDuration: 86400, 85 | }, 86 | 1340023: { 87 | ID: 1340023, 88 | Name: "荷香爽飲", 89 | SellPrice: 17, 90 | CompleteDuration: 600, 91 | ExpireDuration: 1200, 92 | }, 93 | 1340015: { 94 | ID: 1340015, 95 | Name: "驚奇松塔餅", 96 | SellPrice: 2, 97 | CompleteDuration: 86400, 98 | ExpireDuration: 172800, 99 | }, 100 | 1340016: { 101 | ID: 1340016, 102 | Name: "彩虹漿果燴蝶魚", 103 | SellPrice: 2, 104 | CompleteDuration: 900, 105 | ExpireDuration: 1800, 106 | }, 107 | 1340017: { 108 | ID: 1340017, 109 | Name: "拉姆小饅頭", 110 | SellPrice: 13, 111 | CompleteDuration: 600, 112 | ExpireDuration: 1200, 113 | }, 114 | 1340018: { 115 | ID: 1340018, 116 | Name: "神秘湖蟹蓉泡芙", 117 | SellPrice: 5, 118 | CompleteDuration: 216000, 119 | ExpireDuration: 432000, 120 | }, 121 | 1340019: { 122 | ID: 1340019, 123 | Name: "金槍魚彩菇披薩", 124 | SellPrice: 9, 125 | CompleteDuration: 86400, 126 | ExpireDuration: 172800, 127 | }, 128 | 1340020: { 129 | ID: 1340020, 130 | Name: "梅森鮮果湯", 131 | SellPrice: 2, 132 | CompleteDuration: 1800, 133 | ExpireDuration: 3600, 134 | }, 135 | 1340011: { 136 | ID: 1340011, 137 | Name: "蜜汁卡蘭花", 138 | SellPrice: 2, 139 | CompleteDuration: 600, 140 | ExpireDuration: 1200, 141 | }, 142 | 1340012: { 143 | ID: 1340012, 144 | Name: "尤尤什錦百燴", 145 | SellPrice: 2, 146 | CompleteDuration: 1200, 147 | ExpireDuration: 2400, 148 | }, 149 | 1340013: { 150 | ID: 1340013, 151 | Name: "摩雅霜降魚排", 152 | SellPrice: 7, 153 | CompleteDuration: 172800, 154 | ExpireDuration: 345600, 155 | }, 156 | 1340033: { 157 | ID: 1340033, 158 | Name: "胡蘿蔔蓋飯", 159 | SellPrice: 15, 160 | CompleteDuration: 86400, 161 | ExpireDuration: 172800, 162 | }, 163 | 1340034: { 164 | ID: 1340034, 165 | Name: "拉姆七彩沙拉", 166 | SellPrice: 4, 167 | CompleteDuration: 1800, 168 | ExpireDuration: 3600, 169 | }, 170 | 1340035: { 171 | ID: 1340035, 172 | Name: "拉姆曲奇餅", 173 | SellPrice: 12, 174 | CompleteDuration: 1200, 175 | ExpireDuration: 2400, 176 | }, 177 | 1340036: { 178 | ID: 1340036, 179 | Name: "拉姆鴨蛋麵", 180 | SellPrice: 15, 181 | CompleteDuration: 1800, 182 | ExpireDuration: 3600, 183 | }, 184 | 1340028: { 185 | ID: 1340028, 186 | Name: "酸甜冰泥", 187 | SellPrice: 3, 188 | CompleteDuration: 600, 189 | ExpireDuration: 1200, 190 | }, 191 | 1340029: { 192 | ID: 1340029, 193 | Name: "雲朵松糕", 194 | SellPrice: 10, 195 | CompleteDuration: 108000, 196 | ExpireDuration: 216000, 197 | }, 198 | 1340021: { 199 | ID: 1340021, 200 | Name: "玫瑰香蒸塔塔酥", 201 | SellPrice: 6, 202 | CompleteDuration: 900, 203 | ExpireDuration: 1800, 204 | }, 205 | 1340049: { 206 | ID: 1340049, 207 | Name: "音符巧克力", 208 | SellPrice: 13, 209 | CompleteDuration: 1200, 210 | ExpireDuration: 2400, 211 | }, 212 | 1340050: { 213 | ID: 1340050, 214 | Name: "月亮船優酪乳雪糕", 215 | SellPrice: 11, 216 | CompleteDuration: 900, 217 | ExpireDuration: 1800, 218 | }, 219 | 1340051: { 220 | ID: 1340051, 221 | Name: "焦糖拉姆布丁", 222 | SellPrice: 50, 223 | CompleteDuration: 21600, 224 | ExpireDuration: 86400, 225 | }, 226 | 1340052: { 227 | ID: 1340052, 228 | Name: "多彩粽子", 229 | SellPrice: 25, 230 | CompleteDuration: 1800, 231 | ExpireDuration: 3600, 232 | }, 233 | 1340053: { 234 | ID: 1340053, 235 | Name: "繽紛土豆泥", 236 | SellPrice: 5, 237 | CompleteDuration: 28800, 238 | ExpireDuration: 57600, 239 | }, 240 | 1340054: { 241 | ID: 1340054, 242 | Name: "檸檬蛋糕", 243 | SellPrice: 2, 244 | CompleteDuration: 3600, 245 | ExpireDuration: 7200, 246 | }, 247 | 1340055: { 248 | ID: 1340055, 249 | Name: "草莓冰爽碎碎冰", 250 | SellPrice: 5, 251 | CompleteDuration: 3600, 252 | ExpireDuration: 7200, 253 | }, 254 | 1340048: { 255 | ID: 1340048, 256 | Name: "小惡魔披薩", 257 | SellPrice: 30, 258 | CompleteDuration: 86400, 259 | ExpireDuration: 172800, 260 | }, 261 | 1340057: { 262 | ID: 1340057, 263 | Name: "甜橙布丁冷飲", 264 | SellPrice: 12, 265 | CompleteDuration: 3600, 266 | ExpireDuration: 7200, 267 | }, 268 | 1340058: { 269 | ID: 1340058, 270 | Name: "鮮蝦時蔬拼盤", 271 | SellPrice: 7, 272 | CompleteDuration: 3600, 273 | ExpireDuration: 7200, 274 | }, 275 | 1340059: { 276 | ID: 1340059, 277 | Name: "黑糊糊粥", 278 | SellPrice: 15, 279 | CompleteDuration: 5400, 280 | ExpireDuration: 10800, 281 | }, 282 | 1340060: { 283 | ID: 1340060, 284 | Name: "多彩塔塔酥", 285 | SellPrice: 30, 286 | CompleteDuration: 1200, 287 | ExpireDuration: 2400, 288 | }, 289 | 1340062: { 290 | ID: 1340062, 291 | Name: "清爽布丁", 292 | SellPrice: 5, 293 | CompleteDuration: 1200, 294 | ExpireDuration: 2400, 295 | }, 296 | 1340063: { 297 | ID: 1340063, 298 | Name: "秘製小煎餅", 299 | SellPrice: 7, 300 | CompleteDuration: 5400, 301 | ExpireDuration: 10800, 302 | }, 303 | 1340056: { 304 | ID: 1340056, 305 | Name: "彩虹冰爽", 306 | SellPrice: 6, 307 | CompleteDuration: 3600, 308 | ExpireDuration: 7200, 309 | }, 310 | 1340065: { 311 | ID: 1340065, 312 | Name: "水蛋堡", 313 | SellPrice: 25, 314 | CompleteDuration: 1800, 315 | ExpireDuration: 3600, 316 | }, 317 | 1340066: { 318 | ID: 1340066, 319 | Name: "南瓜布丁", 320 | SellPrice: 5, 321 | CompleteDuration: 3600, 322 | ExpireDuration: 7200, 323 | }, 324 | 1340067: { 325 | ID: 1340067, 326 | Name: "香濃薑湯", 327 | SellPrice: 10, 328 | CompleteDuration: 2400, 329 | ExpireDuration: 4800, 330 | }, 331 | 1340030: { 332 | ID: 1340030, 333 | Name: "愛心蛋蛋堡", 334 | SellPrice: 10, 335 | CompleteDuration: 172800, 336 | ExpireDuration: 345600, 337 | }, 338 | 1340061: { 339 | ID: 1340061, 340 | Name: "摩摩蛋黃月餅", 341 | SellPrice: 15, 342 | CompleteDuration: 1200, 343 | ExpireDuration: 1200, 344 | }, 345 | 1340032: { 346 | ID: 1340032, 347 | Name: "黑胡椒沙朗牛排", 348 | SellPrice: 22, 349 | CompleteDuration: 172800, 350 | ExpireDuration: 345600, 351 | }, 352 | 1340044: { 353 | ID: 1340044, 354 | Name: "雙層巧克力蛋糕", 355 | SellPrice: 48, 356 | CompleteDuration: 129600, 357 | ExpireDuration: 259200, 358 | }, 359 | 1340064: { 360 | ID: 1340064, 361 | Name: "水果豐收蛋糕", 362 | SellPrice: 25, 363 | CompleteDuration: 43200, 364 | ExpireDuration: 86400, 365 | }, 366 | 1340046: { 367 | ID: 1340046, 368 | Name: "冰糖葫蘆", 369 | SellPrice: 20, 370 | CompleteDuration: 1800, 371 | ExpireDuration: 3600, 372 | }, 373 | 1340024: { 374 | ID: 1340024, 375 | Name: "豆香南瓜飯", 376 | SellPrice: 10, 377 | CompleteDuration: 86400, 378 | ExpireDuration: 172800, 379 | }, 380 | 1340025: { 381 | ID: 1340025, 382 | Name: "葡萄冰沙", 383 | SellPrice: 7, 384 | CompleteDuration: 600, 385 | ExpireDuration: 1200, 386 | }, 387 | 1340026: { 388 | ID: 1340026, 389 | Name: "七彩草莓霜淇淋", 390 | SellPrice: 10, 391 | CompleteDuration: 1800, 392 | ExpireDuration: 3600, 393 | }, 394 | 1340027: { 395 | ID: 1340027, 396 | Name: "十二星座餅乾", 397 | SellPrice: 7, 398 | CompleteDuration: 1200, 399 | ExpireDuration: 2400, 400 | }, 401 | 1340040: { 402 | ID: 1340040, 403 | Name: "七寶飯", 404 | SellPrice: 35, 405 | CompleteDuration: 86400, 406 | ExpireDuration: 172800, 407 | }, 408 | 1340041: { 409 | ID: 1340041, 410 | Name: "清爽薯片", 411 | SellPrice: 12, 412 | CompleteDuration: 1200, 413 | ExpireDuration: 2400, 414 | }, 415 | 1340042: { 416 | ID: 1340042, 417 | Name: "濃情南瓜盅", 418 | SellPrice: 4, 419 | CompleteDuration: 3600, 420 | ExpireDuration: 7200, 421 | }, 422 | 1340031: { 423 | ID: 1340031, 424 | Name: "蜂蜜水果熱飲", 425 | SellPrice: 20, 426 | CompleteDuration: 1500, 427 | ExpireDuration: 3000, 428 | }, 429 | 1340074: { 430 | ID: 1340074, 431 | Name: "漿果糯米糍", 432 | SellPrice: 6, 433 | CompleteDuration: 10800, 434 | ExpireDuration: 21600, 435 | }, 436 | 1340045: { 437 | ID: 1340045, 438 | Name: "水果飯糰", 439 | SellPrice: 15, 440 | CompleteDuration: 600, 441 | ExpireDuration: 1200, 442 | }, 443 | 1340068: { 444 | ID: 1340068, 445 | Name: "水果冰晶粽", 446 | SellPrice: 15, 447 | CompleteDuration: 600, 448 | ExpireDuration: 1200, 449 | }, 450 | 1340069: { 451 | ID: 1340069, 452 | Name: "夏日清爽涼麵", 453 | SellPrice: 5, 454 | CompleteDuration: 600, 455 | ExpireDuration: 1200, 456 | }, 457 | 1340037: { 458 | ID: 1340037, 459 | Name: "麻辣小龍蝦", 460 | SellPrice: 5, 461 | CompleteDuration: 3600, 462 | ExpireDuration: 7200, 463 | }, 464 | 1340039: { 465 | ID: 1340039, 466 | Name: "葡萄石榴派", 467 | SellPrice: 30, 468 | CompleteDuration: 1800, 469 | ExpireDuration: 3600, 470 | }, 471 | 1340073: { 472 | ID: 1340073, 473 | Name: "櫻花冰淇淋蛋糕", 474 | SellPrice: 10, 475 | CompleteDuration: 3600, 476 | ExpireDuration: 7200, 477 | }, 478 | 1340014: { 479 | ID: 1340014, 480 | Name: "四季百花羹", 481 | SellPrice: 1, 482 | CompleteDuration: 900, 483 | ExpireDuration: 1800, 484 | }, 485 | 1340043: { 486 | ID: 1340043, 487 | Name: "果蔬蛋捲", 488 | SellPrice: 12, 489 | CompleteDuration: 172800, 490 | ExpireDuration: 345600, 491 | }, 492 | 1340070: { 493 | ID: 1340070, 494 | Name: "燒烤拉姆", 495 | SellPrice: 20, 496 | CompleteDuration: 1800, 497 | ExpireDuration: 3200, 498 | }, 499 | 1340071: { 500 | ID: 1340071, 501 | Name: "夏威夷冰飲", 502 | SellPrice: 2, 503 | CompleteDuration: 900, 504 | ExpireDuration: 1800, 505 | }, 506 | 1340072: { 507 | ID: 1340072, 508 | Name: "摩摩蛋包飯", 509 | SellPrice: 10, 510 | CompleteDuration: 43200, 511 | ExpireDuration: 86400, 512 | }, 513 | 1340010: { 514 | ID: 1340010, 515 | Name: "串烤海琴花", 516 | SellPrice: 1, 517 | CompleteDuration: 1200, 518 | ExpireDuration: 2400, 519 | }, 520 | } 521 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /reverse/dissector.lua: -------------------------------------------------------------------------------- 1 | MOLE_PDU_HEADER_LENGTH = 0x11 2 | KEY = "^FStx,wl6NquAVRF@f%6\x00" 3 | 4 | MAPPING = { 5 | [1]="userID", 6 | [2]="modeyPassword | NEW_CREATE_ID", 7 | [3]="submissGameScore", 8 | [4]="listGameScore", 9 | [5]="updateRoomHot", 10 | [6]="getRoomHot", 11 | [101]="loginDirSer", 12 | [102]="getSerList", 13 | [103]="getSerListByPage | NEW_LOGIN", 14 | [105]="NEW_RECOMMEND_SERVER_LIST", 15 | [106]="NEW_RANGE_SERVER_LIST", 16 | [107]="NEW_CREATE_MOLE", 17 | [201]="登錄Online Server", 18 | [202]="未知", 19 | [203]="獲取基本屬性", 20 | [204]="獲取場景裡人物信息", 21 | [205]="indentityPro", 22 | [206]="getGameGroup", 23 | [207]="獲取用戶基本屬性", 24 | [208]="修改用戶暱稱", 25 | [209]="修改顏色", 26 | [210]="開關門(1:關,0:開)", 27 | [211]="購買寵物", 28 | [212]="拉寵物信息", 29 | [214]="拉寵物數量", 30 | [215]="寵物跟隨(1),還是回家(0)", 31 | [216]="SMC任務列表", 32 | [217]="SMC更新任務列表", 33 | [218]="寵物改名", 34 | [219]="寵物play", 35 | [220]="寵物位置", 36 | [221]="寵物死亡", 37 | [222]="寵物托管成功", 38 | [223]="取消托管的寵物成功", 39 | [224]="取我托管的寵物", 40 | [225]="接寵物任務", 41 | [226]="終止寵物任務", 42 | [227]="將寵物任務設置為完成", 43 | [228]="拉取寵物任務列表", 44 | [229]="拉取任務中的寵物列表", 45 | [230]="索要寵物", 46 | [231]="把這隻拉姆變成超級的", 47 | [232]="查詢是否已有超級拉姆", 48 | [233]="拉寵物在地圖中的數量", 49 | [234]="寵物在地圖進出", 50 | [235]="在外寵物跟隨(1),還是回家(0)", 51 | [236]="寵物學搞怪技能", 52 | [237]="使用餵養道具(清泥巴)", 53 | [238]="寵物變色技能", 54 | [239]="寵物回家", 55 | [240]="在家園和牧場拉寵物信息", 56 | [241]="搜索MOLE在哪裡", 57 | [242]="獲取自定義交互", 58 | [243]="設定自定義交互", 59 | [244]="獲取任務Buffer", 60 | [245]="設置任務Buffer", 61 | [246]="設定自定義交互", 62 | [248]="完成任物獲取任物獎品", 63 | [251]="召喚超級拉姆", 64 | [301]="看報紙", 65 | [302]="聊天信息", 66 | [303]="走路", 67 | [304]="blowBubbles", 68 | [305]="動作", 69 | [306]="扔道具", 70 | [307]="選擇題", 71 | [308]="SMC撿道具", 72 | [309]="收集道具", 73 | [310]="舉報", 74 | [311]="投稿", 75 | [312]="叨叨牆", 76 | [313]="拉取叨叨牆", 77 | [314]="查找叨叨牆留言", 78 | [315]="滑梯.把人移動到指定位置", 79 | [316]="叨叨牆獻花", 80 | [317]="場景隨機道具", 81 | [318]="撿隨機生成道具", 82 | [319]="未知", 83 | [320]="請求生成道具", 84 | [321]="物品交換不更新任務列表", 85 | [322]="拉取叨叨牆", 86 | [401]="進入地圖", 87 | [402]="離開地圖", 88 | [403]="進入遊戲", 89 | [404]="離開遊戲", 90 | [405]="場景用戶信息", 91 | [406]="獲取地圖信息", 92 | [407]="單機遊戲提交積分", 93 | [408]="取各地圖的在線用戶數", 94 | [409]="取用戶小屋信息", 95 | [410]="保存小屋道具", 96 | [412]="會員小屋展示列表", 97 | [413]="GET_VIP_ROOM_LIST", 98 | [414]="獲取地圖中最新進入的幾個用戶", 99 | [415]="保存小屋背景", 100 | [421]="遊戲組別", 101 | [422]="遊戲場景狀態", 102 | [423]="單機遊戲動作", 103 | [424]="單機遊戲其它人信息", 104 | [425]="足球場上每個人的信息", 105 | [426]="根據遊戲ID獲得登入簽登入Session", 106 | [431]="加入足球遊戲", 107 | [432]="進球", 108 | [433]="控制足球", 109 | [434]="時間提示", 110 | [435]="GOFOOTBALL", 111 | [436]="初始化足球位置", 112 | [437]="踢球", 113 | [438]="離開足球遊戲", 114 | [440]="足球遊戲結束(10分種滿,或者人沒了)", 115 | [441]="足球遊戲離開", 116 | [461]="獲取截圖Session", 117 | [462]="獲取PainterSession", 118 | [501]="購買道具", 119 | [502]="useMDProperty", 120 | [503]="使用用戶裝扮道具", 121 | [504]="使用特效道具", 122 | [505]="使用餵養道具", 123 | [506]="useFunctionT", 124 | [507]="查看背包", 125 | [508]="丟棄道具", 126 | [509]="列出商店裡可賣的道具", 127 | [510]="變身道具失效通知", 128 | [511]="獲取某一道具的數目", 129 | [512]="GIVEMEMONEY", 130 | [513]="衣服回收", 131 | [514]="出售物品給大頭鞋", 132 | [515]="合成物品", 133 | [516]="強制變身道具失效", 134 | [517]="拉取不同類型的多個物品信息", 135 | [601]="邀請好友到場景", 136 | [602]="應答好友邀請", 137 | [603]="加好友請求發送成功", 138 | [604]="應答加為好友請求", 139 | [605]="刪除好友", 140 | [606]="getFrendList", 141 | [607]="加黑名單", 142 | [608]="刪除黑名單", 143 | [609]="獲得黑名單列表", 144 | [610]="查看是否在線", 145 | [611]="查看好友家園和寵物是否有更新", 146 | [612]="批量刪除好友", 147 | [701]="摩爾大使,被推薦用戶交任務", 148 | [702]="摩爾大使查找子級的返回", 149 | [713]="FOOTBALLINFO", 150 | [751]="許願成功", 151 | [752]="開啟願望成功", 152 | [753]="拉取願望列表", 153 | [754]="檢查我當天是否許過願", 154 | [801]="發送明信片返回成功", 155 | [802]="獲取所有明信片ID", 156 | [803]="讀取一張明信片", 157 | [804]="刪除一張明信片", 158 | [805]="僅讀取未讀過的明信片數目", 159 | [806]="刪除全部明信片", 160 | [807]="拉取卡牌對戰經驗", 161 | [808]="標記郵件是否領過禮物", 162 | [809]="拉取用戶所有郵件的基本信息", 163 | [810]="刪除部分郵件", 164 | [901]="小屋熱度(花)", 165 | [903]="送(花,泥)", 166 | [904]="最近訪客", 167 | [907]="增加留言信息", 168 | [908]="審核留言信息", 169 | [909]="小屋留言信息", 170 | [910]="刪除留言信息", 171 | [911]="回復留言信息", 172 | [912]="獲取毛毛樹信息", 173 | [913]="給毛毛樹澆水施肥", 174 | [914]="獲取給毛毛樹澆水施肥的用戶列表", 175 | [915]="摘一個毛毛樹果實", 176 | [916]="小屋特殊的物品在小屋中的表現信息", 177 | [917]="SMC 等級信息", 178 | [918]="增加SMC 等級", 179 | [919]="查詢建築師等級經驗", 180 | [951]="設置用戶生日", 181 | [952]="獲取生日套裝", 182 | [953]="取消生日套裝", 183 | [961]="WISHING_WORD", 184 | [962]="SET_GIFT", 185 | [963]="GET_WISH", 186 | [964]="IS_GET_WISH", 187 | [967]="寫入元宵節許願", 188 | [968]="讀取元宵節許願", 189 | [971]="查看本服派對列表", 190 | [972]="創建一個派對", 191 | [973]="查看用戶創建的派對", 192 | [974]="查看本服派對數量", 193 | [981]="設置春聯", 194 | [982]="拉取春聯", 195 | [984]="使用元寶交換物品", 196 | [986]="使用元寶交換物品", 197 | [990]="福信息", 198 | [991]="BLESSING_ADD", 199 | [992]="BLESSING_USER", 200 | [993]="帶冒子", 201 | [994]="去冒子", 202 | [995]="拉取一條街建築物信息", 203 | [996]="創建建築物", 204 | [997]="取得土地使用許可證", 205 | [998]="設置建築物名稱", 206 | [999]="restart_onling", 207 | [1000]="查詢格子總數", 208 | [1001]="創建嚕噗群", 209 | [1002]="邀請好友加入群", 210 | [1003]="請求加入群", 211 | [1004]="同意加入我的群", 212 | [1005]="退出群", 213 | [1006]="把某成員提出群", 214 | [1007]="解散嚕噗群", 215 | [1008]="修改群公告", 216 | [1009]="群聊", 217 | [1010]="獲取咕嚕噗群列表", 218 | [1011]="獲取群詳細信息", 219 | [1012]="設置群屏蔽狀態", 220 | [1013]="設置建築物內部樣式", 221 | [1014]="拉取店鋪內的信息", 222 | [1015]="僱傭服務員", 223 | [1016]="解僱服務員", 224 | [1017]="開始製作菜", 225 | [1018]="端菜吃菜", 226 | [1019]="倒菜與清潔灶台", 227 | [1020]="設置菜的狀態", 228 | [1021]="把菜端到保鮮桌", 229 | [1022]="拉取服務員列表", 230 | [1023]="拉取離線餐廳信息", 231 | [1024]="拉取解鎖物品列表", 232 | [1025]="減少好評度", 233 | [1026]="房間信息改變通知", 234 | [1027]="查詢米米號對應的餐廳", 235 | [1028]="拉取自己拉姆僱主UID", 236 | [1029]="獲得榮譽通知", 237 | [1030]="拉取榮譽列表", 238 | [1031]="查看餐廳隨機事件", 239 | [1032]="解決隨機事件", 240 | [1034]="拉取好友餐廳排名信息", 241 | [1035]="扣除粽子", 242 | [1036]="領取團隊獎項", 243 | [1037]="領取個人獎項", 244 | [1038]="查看名次", 245 | [1040]="查詢餐廳食物個數", 246 | [1041]="查詢遊戲記錄", 247 | [1043]="查詢可收購菜", 248 | [1044]="收購菜", 249 | [1046]="獲取菜品製作次數和星級", 250 | [1047]="通知菜品星級提升", 251 | [1049]="設置建築物樣式", 252 | [1098]="查看臨時數據", 253 | [1099]="設置臨時數據", 254 | [1100]="好友上線通知", 255 | [1110]="拉取蘑菇問題答案", 256 | [1111]="獲得跑步獎勵", 257 | [1112]="拉取蘑菇問題總數", 258 | [1113]="獲得跑步次數", 259 | [1114]="寵物在店裡玩增加心情", 260 | [1115]="發現物品", 261 | [1116]="贈送物品", 262 | [1117]="每天限量增加物品", 263 | [1118]="彈珠台獎勵", 264 | [1121]="寵物換衣服", 265 | [1122]="寵物換榮譽", 266 | [1123]="寵物買道具", 267 | [1124]="寵物擁有的道具", 268 | [1125]="超拉領取超拉戰袍", 269 | [1126]="拉姆加速成長", 270 | [1127]="設置拉姆技能", 271 | [1128]="拉姆世界兌換隨機物品", 272 | [1129]="伊蓮慈善派對捐錢捐物", 273 | [1130]="伊蓮慈善派對捐贈排名", 274 | [1131]="伊蓮慈善派對捐贈信息 | 拉姆報名", 275 | [1132]="變成水桶", 276 | [1133]="變水桶超時", 277 | [1134]="提交送水", 278 | [1135]="拉姆提交比賽分數", 279 | [1136]="拉取用戶所有拉姆的成績", 280 | [1137]="按日期拉取所有運動隊的獎牌數", 281 | [1138]="拉取某項比賽的最高成績", 282 | [1139]="拉取某隊所有獎牌數", 283 | [1140]="獲取獎牌獎杯請求", 284 | [1141]="拉姆王獎勵形象", 285 | [1142]="拉姆王懲罰形象", 286 | [1143]="拉姆王獎勵形象超時", 287 | [1144]="拉姆王懲罰形象超時", 288 | [1151]="報名選隊", 289 | [1152]="查詢已選的隊", 290 | [1153]="獲取隊服", 291 | [1192]="查詢家園種值種子或牧場放養動物", 292 | [1201]="獲取用戶所有存款信息請求", 293 | [1202]="存款請求", 294 | [1203]="取款請求", 295 | [1204]="查詢拉姆技能任務狀態", 296 | [1205]="設置拉姆技能任務狀態", 297 | [1208]="建造拉姆神殿", 298 | [1209]="技能獲得物品", 299 | [1210]="得到神殿的建造進度", 300 | [1212]="拉姆變身協議", 301 | [1213]="查詢所有在任務中的拉姆技能任務狀態", 302 | [1214]="還原拉姆變身協議", 303 | [1215]="查看臨時數據", 304 | [1216]="設置臨時數據", 305 | [1217]="設置拉姆技能系", 306 | [1218]="設置拉姆技能技能框", 307 | [1220]="獲得建築任務獎勵", 308 | [1221]="修復紅衣的協議", 309 | [1222]="土林長老得到卡牌", 310 | [1223]="檢查用戶是否有基礎卡牌", 311 | [1224]="得到流浪商人的物品", 312 | [1225]="檢查用戶是否有基礎卡牌", 313 | [1226]="在任務中領取龍蛋", 314 | [1227]="拉取飛龍背包", 315 | [1228]="設置飛龍狀態", 316 | [1229]="放生飛龍", 317 | [1231]="餵龍", 318 | [1232]="神奇糖豆換糖果變身果實", 319 | [1233]="龍孵蛋", 320 | [1234]="加速龍的孵蛋", 321 | [1235]="領取幼龍", 322 | [1237]="獲取龍孵蛋的時間", 323 | [1238]="拉取飛龍信息", 324 | [1239]="查詢是否已經是森林騎士", 325 | [1240]="火神盃報名", 326 | [1241]="獲取報名的隊伍", 327 | [1242]="獲取隨機物品協議", 328 | [1243]="兌換物品", 329 | [1244]="得到各個隊的獎牌數", 330 | [1245]="得到個人的獎牌數", 331 | [1246]="EXCHANGE_GAME_SCORE", 332 | [1247]="添加物品到友誼寶盒", 333 | [1248]="獲取物品從友誼寶盒", 334 | [1249]="查詢友誼寶盒物品信息", 335 | [1250]="查詢獲取友誼寶盒物品歷史信息", 336 | [1251]="火神盃領獎", 337 | [1252]="升級飛龍背包", 338 | [1254]="領取新學期大禮包", 339 | [1255]="查詢用戶是否有神力超級拉姆", 340 | [1256]="點點豆購買", 341 | [1257]="刪除死亡的拉姆", 342 | [1258]="國慶拿東西", 343 | [1260]="伊蓮慈善派對競猜出價", 344 | [1261]="伊蓮慈善派對競猜查詢和通知競猜開始", 345 | [1262]="伊蓮慈善派對競猜結束", 346 | [1263]="拉取教室內景解鎖", 347 | [1264]="拉姆教室教師榮譽", 348 | [1265]="通知獲得教室榮譽", 349 | [1266]="拉姆教室學生回答問題", 350 | [1267]="拉姆體育課成績提交", 351 | [1268]="拉姆教室好友排名", 352 | [1269]="查詢SMC等級經驗", 353 | [1270]="使用教室道具", 354 | [1271]="拉取教室道具", 355 | [1272]="教學回憶(去向)", 356 | [1273]="學期畢業", 357 | [1274]="創建拉姆教室", 358 | [1275]="查詢格子數", 359 | [1276]="拉取格子信息", 360 | [1277]="設置拉姆教室的名稱", 361 | [1278]="設置建拉姆教室的內部樣式", 362 | [1279]="拉取教室內的信息", 363 | [1280]="拉取生源信息", 364 | [1281]="添加學生信息", 365 | [1282]="刪除所有學生信息", 366 | [1283]="學生檔案信息", 367 | [1284]="教師檔案信息", 368 | [1285]="拉取教學計劃", 369 | [1286]="開始上課", 370 | [1288]="下課", 371 | [1289]="拉取課程教學次數", 372 | [1290]="通知教師基本信息", 373 | [1291]="通知教師基本信息", 374 | [1292]="考試", 375 | [1293]="拉取考試信息", 376 | [1294]="查詢是否創建教室", 377 | [1295]="拉取拉姆教室的一個隨機用戶", 378 | [1296]="查詢上課狀態", 379 | [1297]="給植物施肥", 380 | [1298]="給花兒授粉", 381 | [1299]="田地更翻", 382 | [1300]="更新植物屬性", 383 | [1301]="查看用戶家園", 384 | [1302]="保存家園道具", 385 | [1303]="查看家園倉庫道具", 386 | [1304]="種植種子", 387 | [1305]="刪除芽苗", 388 | [1306]="給芽苗澆水", 389 | [1307]="給芽苗除蟲", 390 | [1308]="獲取單個芽苗的屬性", 391 | [1309]="收獲果實", 392 | [1310]="賣果實", 393 | [1311]="家園來客", 394 | [1312]="保存家園中用過的(鄰居用)", 395 | [1313]="這個用戶是否存在", 396 | [1314]="用戶FLAG", 397 | [1315]="防沉迷", 398 | [1316]="獲得兔子偷吃的果實", 399 | [1317]="要生肖帽子", 400 | [1318]="拿盒子中的物品", 401 | [1319]="拿盒子中的物品的人的列表", 402 | [1320]="MAP_FIRE_AUTO", 403 | [1321]="MAP_FIRE_PUT_OUT", 404 | [1322]="MAP_FIRE_GET", 405 | [1323]="HOME_FIRE_GET", 406 | [1324]="HOME_FIRE_PUT_OUT", 407 | [1325]="HOME_FIRE_AUTO", 408 | [1326]="GET_RANDOM_GOODS", 409 | [1327]="問卷調查 投票", 410 | [1328]="獲取我的職業", 411 | [1329]="領取smc工資", 412 | [1330]="查看smc工資", 413 | [1334]="用戶累計在線時間", 414 | [1335]="防沉迷剩餘時間", 415 | [1341]="摩爾偷果實", 416 | [1352]="贈送物品3換1送好友", 417 | [1353]="換禮物", 418 | [1354]="拉取送禮物的次數", 419 | [1361]="獲取牧場總體信息", 420 | [1362]="查看牧場倉庫道具", 421 | [1363]="捕獲動物", 422 | [1364]="增加飼料", 423 | [1365]="飼養動物", 424 | [1366]="獲取所有魚的信息", 425 | [1367]="加水", 426 | [1368]="訪問者", 427 | [1369]="查看牧場飼料房道具", 428 | [1370]="換牧場背景", 429 | [1371]="鎖", 430 | [1372]="領羊", 431 | [1373]="輸出20隻羊後超拉領取獎勵", 432 | [1374]="帶牧場動物在身上", 433 | [1375]="動物在外面放牧", 434 | [1376]="用戶家裡的動物在挨餓", 435 | [1377]="放生動物", 436 | [1381]="查詢盔甲的防禦值", 437 | [1382]="改變盔甲的防禦值", 438 | [1383]="查詢5個石頭", 439 | [1384]="設置5個石頭中的一個值", 440 | [1385]="要錢", 441 | [1386]="sl專屬物品線索要錢", 442 | [1387]="獲取企鵝蛋的孵化次數或客戶端數據", 443 | [1388]="設置企鵝蛋的孵化次數或客戶端數據", 444 | [1389]="購買多件衣服", 445 | [1390]="獲得抽獎勇士證書的次數", 446 | [1392]="抽取勇士證書", 447 | [1393]="查詢寵物裝扮", 448 | [1394]="查詢道具是否在背包中", 449 | [1400]="設置吉吉樂卡牌兌換", 450 | [1401]="獲取某人吉吉樂卡牌數據", 451 | [1402]="兌換吉吉樂卡牌", 452 | [1403]="查詢那些用戶可以兌換指定的卡牌", 453 | [1404]="升級卡牌兌換服裝或米幣", 454 | [1406]="兌換魔法卡片", 455 | [1407]="通知用戶使用了動物技能(廣播包)", 456 | [1408]="蛋雨獲取地圖蛋信息", 457 | [1409]="蛋雨領取指定點的蛋", 458 | [1414]="主動通知包廣播信息", 459 | [1456]="查看好友HOT", 460 | [1461]="遊戲王", 461 | [1462]="遊戲王", 462 | [1463]="遊戲王", 463 | [1464]="遊戲王", 464 | [1465]="遊戲王", 465 | [1466]="物品交換特殊情況", 466 | [1467]="獲取摩摩倉庫裡的動物星級", 467 | [1468]="牧場動物使用道具", 468 | [1469]="獲取單個動物使用技能信息", 469 | [1470]="動物使用技能", 470 | [1471]="寫/修改日記", 471 | [1472]="拉取日志標題", 472 | [1473]="刪除日記", 473 | [1474]="設置日志鎖狀態", 474 | [1475]="給日記送花", 475 | [1476]="拉取日志內容", 476 | [1477]="設置日記本鎖狀態", 477 | [1478]="拉取日記本鎖狀態", 478 | [1479]="拉取總共有幾篇日記", 479 | [1481]="提交湯米或尼克打工", 480 | [1482]="拉取打工信息", 481 | [1483]="打工領工資", 482 | [1484]="升級為總工程師", 483 | [1485]="設置為打工學徒", 484 | [1486]="獲取用戶聖光獸的數目", 485 | [1491]="接魔法課程", 486 | [1492]="提交魔法課程", 487 | [1493]="放棄魔法課程", 488 | [1494]="設定課程考核臨時數據", 489 | [1495]="獲取課程考核臨時數據", 490 | [1496]="查詢魔法課程", 491 | [1497]="兌換時空密碼", 492 | [1498]="查詢兌換時空密碼", 493 | [1500]="病床信息", 494 | [1501]="醫生就位", 495 | [1502]="病人就位", 496 | [1503]="醫生離開", 497 | [1504]="病人離開", 498 | [1505]="醫生聽診", 499 | [1506]="醫生治療", 500 | [1507]="醫生值班獎勵", 501 | [1508]="吃藥", 502 | [1521]="怪怪機兌換道具", 503 | [1522]="超拉充值促銷兌換", 504 | [1523]="送湯圓", 505 | [1524]="查詢充值信息", 506 | [1525]="查詢充值信息", 507 | [1527]="收到校巴郵件", 508 | [1531]="查看當前大屏幕的字符串", 509 | [1532]="獲取第一件字母裝", 510 | [1533]="抓人平湊單詞送糖果", 511 | [1534]="兌換字母裝", 512 | [1535]="ABD SOCRE", 513 | [1536]="拉取班級積分和被抓活的的糖果數", 514 | [1537]="寵物買道具", 515 | [1538]="獲取蛋糕信息", 516 | [1539]="製作完蛋糕", 517 | [1540]="送蛋糕給NPC", 518 | [1541]="獲取蛋糕積分", 519 | [1542]="REC_ONLINE_TIME", 520 | [1551]="報名參加拉力賽", 521 | [1552]="給某個賽道比賽情況加分", 522 | [1553]="查詢個人比賽情況", 523 | [1554]="更新某個賽道的時間記錄", 524 | [1555]="查詢四個賽道的時間記錄", 525 | [1556]="查詢兩個隊伍的分數記錄", 526 | [1557]="給自己隊增加人氣", 527 | [1558]="獲取賽道比賽次數", 528 | [1559]="獲取個人當日積分", 529 | [1560]="全場通知可以加入人氣比拼", 530 | [1561]="全場通知人氣比拼結果", 531 | [1562]="是否可以增加人氣", 532 | [1563]="獲得特殊獎章", 533 | [1565]="獻花", 534 | [1566]="查看獻花數目", 535 | [1567]="兌換拉力賽卡牌", 536 | [1568]="獲取本隊對應的賽車", 537 | [1569]="飛艇返航", 538 | [1570]="拉取飛船內有多少人", 539 | [1571]="飛船還有多長時間返航", 540 | [1572]="人氣比拼可否得獎章", 541 | [1573]="是否可以得到紀念賽車", 542 | [1574]="班長獲取英語節結果", 543 | [1575]="任意人獲取英語節結果", 544 | [1576]="英語節摩爾豆獎勵", 545 | [1577]="獲取比賽結果以及獎杯頒發", 546 | [1579]="獲取比賽結果", 547 | [1581]="伺服器廣播地圖時間狀態", 548 | [1600]="把衣服放到衣櫥裡", 549 | [1601]="把衣服從衣櫥裡拿出來", 550 | [1602]="查詢衣櫥物品", 551 | [1699]="獲取炫風駕照", 552 | [1700]="1.1.1 把車開出來", 553 | [1701]="1.1.2 把車開回去", 554 | [1702]="1.1.3 車庫中汽車列表", 555 | [1703]="1.1.4 設置哪輛車用於展示", 556 | [1704]="1.1.5 獲取展示車輛信息(", 557 | [1705]="1.1.6 汽車加油", 558 | [1706]="1.1.6 買汽車", 559 | [1707]="查詢汽車擁有量", 560 | [1709]="租到宅急送(1709)", 561 | [1710]="裝/卸南瓜(1710)", 562 | [1801]="拿取合成物品", 563 | [1802]="失物招領", 564 | [1803]="伺服器廣播R4機器狀態", 565 | [1804]="R4合成物品", 566 | [1805]="合成物品結束", 567 | [1806]="檢查是否有未領取合成物品", 568 | [1851]="批量變成南瓜", 569 | [1852]="變成南瓜超時", 570 | [1853]="伺服器主動廣播黑貓狀態", 571 | [1854]="查看黑貓車狀態", 572 | [1856]="拿糖", 573 | [1900]="1.1.1 買漁網", 574 | [1901]="1.1.2 得到漁網狀態", 575 | [1902]="1.1.3 撈魚", 576 | [1903]="贈送", 577 | [1904]="變成南瓜", 578 | [1905]="變成南瓜超時", 579 | [1906]="減少糖果", 580 | [1907]="查詢糖果道具數量", 581 | [1908]="糖果記錄兌換道具", 582 | [1909]="超拉打工", 583 | [1911]="查詢種植能手和養殖能手等級", 584 | [1912]="NPC好感度查詢", 585 | [1913]="禮物抽獎", 586 | [1914]="改變NPC好感度", 587 | [1915]="查詢任意物品數量", 588 | [1916]="挑選禮帽", 589 | [1918]="放蛋", 590 | [1919]="孵蛋", 591 | [1920]="查蛋狀態", 592 | [1921]="拿羊毛", 593 | [1922]="拿蛋", 594 | [1923]="生育站位", 595 | [1924]="動物培育站位", 596 | [1925]="購買動物", 597 | [1926]="剩餘生育時間", 598 | [1927]="挑選禮服", 599 | [1928]="破蛋", 600 | [1930]="剪毛佔位置", 601 | [1931]="廣播剪毛佔位置", 602 | [1932]="裝扮打分", 603 | [1933]="設置和momo公主的合影", 604 | [1934]="獲取和momo公主的合影", 605 | [1935]="廣播show場狀態", 606 | [1936]="show場狀態", 607 | [1937]="查詢道具最新價格", 608 | [1939]="得到模特服裝", 609 | [1940]="把模特的衣服穿到摩爾身上", 610 | [1941]="把摩爾的衣服穿到模特身上", 611 | [1946]="吃/放蛋糕", 612 | [1947]="廣播蛋糕桌子狀態", 613 | [1948]="獲取兔兔主人裝", 614 | [1949]="show結束", 615 | [1950]="獲取當前裝扮經驗", 616 | [1951]="裝扮打分升級", 617 | [1952]="設置護花使者", 618 | [1953]="全屏廣播獲獎", 619 | [1954]="獲取護花使者", 620 | [1955]="獲取圖鑑道具情況", 621 | [1956]="給魚稱重", 622 | [1957]="在8號地圖釣魚", 623 | [1958]="查詢魚的總重量", 624 | [1959]="查詢動物剩餘數量", 625 | [1960]="從別人家裡拿鈴鐺", 626 | [1961]="獲取摩爾豆", 627 | [1962]="拉取代賣者信息(家具日)", 628 | [1963]="佔攤位(家具日)", 629 | [1964]="代賣者離開(家具日)", 630 | [1965]="代賣者超時通知(家具日)", 631 | [1966]="購買家具(家具日)", 632 | [1967]="設置聖誕節願望", 633 | [1968]="查看聖誕節願望", 634 | [1969]="拿5個聖誕禮物", 635 | [1970]="查看現有禮物數量", 636 | [1971]="給MOLE送禮物", 637 | [1972]="從壁爐拿禮物", 638 | [1973]="獲得馴鹿車和票", 639 | [1974]="聖誕節下禮物雨", 640 | [1975]="聖誕節收集禮物", 641 | [1976]="給NPC贈送禮物", 642 | [1977]="拿能量星", 643 | [1978]="查詢能量星數量", 644 | [1979]="1.1.1 拍大合照", 645 | [1980]="取大合照", 646 | [1981]="拿大腳印砸蛋", 647 | [1982]="兌換米幣抵用券", 648 | [1983]="拿年底三個腳印", 649 | [1984]="種植_養殖技能提升", 650 | [1985]="領母老虎", 651 | [1986]="元寶兌換", 652 | [1987]="把用戶的某個物品交換成另一個物品(一次性全部交換)", 653 | [1988]="獲得超級拉姆神殿禮包", 654 | [1989]="退還機器狗", 655 | [1990]="餵機器狗", 656 | [1991]="得到機器狗幫做做事的信息", 657 | [1992]="捕獲皮皮或者豆芽", 658 | [1993]="擠牛奶", 659 | [1994]="獲得超級拉姆神殿禮包,只能領取一次", 660 | [1995]="製作道具", 661 | [1996]="為NPC加聲望", 662 | [1997]="玉米換櫻花樹苗", 663 | [1998]="獲取拉姆Vip級別的禮物", 664 | [1999]="獲取摩爾Vip級別的禮物", 665 | [2000]="是否設置過支付密碼", 666 | [2001]="查詢單個產品的價格", 667 | [2003]="查詢單個產品的詳細信息", 668 | [2004]="使用米幣購買", 669 | [2005]="使用米幣和購物卷購買", 670 | [2006]="查詢米幣和購物卷餘額", 671 | [2007]="為屋委會會長投票分數", 672 | [2008]="屋委會會長投票", 673 | [2009]="獲得物品顯示效果廣播", 674 | [2010]="獲取帶簽登入Session", 675 | [2011]="逗貓", 676 | [2012]="每天限量增加物品", 677 | [2013]="分享美食", 678 | [2014]="美譽兌換東西(2014)", 679 | [2015]="查詢美譽度(2015)", 680 | [2016]="根據美譽度領取物品 (2016)", 681 | [2017]="那個隊獲勝", 682 | [2018]="增加分數", 683 | [2019]="查看三個隊的分數", 684 | [2020]="查看三個隊的獎牌數", 685 | [2021]="獲取物品", 686 | [2022]="得到舞台已經開始計時時長", 687 | [2023]="舞台的開始和結束廣播包", 688 | [2024]="加獎牌", 689 | [2025]="得到排行和拉姆的遊戲分數", 690 | [2028]="絲爾特刮刮樂得獎", 691 | [2029]="查詢多個產品的價格", 692 | [2031]="使用金豆購買商品", 693 | [2032]="查詢剩餘多少金豆", 694 | [2033]="使用米幣購買金豆", 695 | [2040]="查詢登錄換積分", 696 | [2050]="查詢包月抵用券數量", 697 | [2101]="看新神奇密碼", 698 | [2102]="用新神奇密碼", 699 | [3000]="初始化玩家卡牌", 700 | [3001]="擁有的卡牌數量", 701 | [3002]="增加一張普通卡牌", 702 | [3003]="查詢可以增加多少張普通卡牌", 703 | [3101]="接NPC任務", 704 | [3102]="交NPC任務", 705 | [3103]="寫NPC任務臨時數據", 706 | [3104]="查詢NPC任務臨時數據", 707 | [3105]="查詢NPC任務", 708 | [3106]="查詢NPC所有任務狀態", 709 | [3107]="取消某任務", 710 | [4000]="題目", 711 | [4001]="題目答案", 712 | [4002]="天空樹答題-得到題目信息", 713 | [4003]="天空樹答題-答題", 714 | [4108]="國慶7天連續登陸", 715 | [4109]="國慶7天連續登陸,領取禮包", 716 | [4113]="巡邏任務接取", 717 | [4114]="小摩爾呼叫尋求幫助", 718 | [4115]="超級蘑菇嚮導回應小摩爾尋求幫助", 719 | [4116]="獲得成就獎勵", 720 | [4117]="查詢獲取的成就獎勵", 721 | [4124]="NEWYEAR_SUBMIT", 722 | [4125]="NEWYEAR_CHECK_INFO", 723 | [4126]="NEWYEAR_CHECK_LIST", 724 | [4127]="NEWYEAR_GET_AWARD", 725 | [4128]="NEWYEAR_PRAY", 726 | [5000]="創建班級", 727 | [5001]="修改班級信息", 728 | [5002]="進入班級地圖", 729 | [5003]="加入班級", 730 | [5004]="退出班級", 731 | [5005]="遞交加入申請", 732 | [5006]="班長審核加入", 733 | [5007]="刪除成員", 734 | [5008]="刪除班級", 735 | [5009]="獲取班級徽章信息", 736 | [5010]="設置顯示的徽章", 737 | [5011]="查看顯示的徽章", 738 | [5012]="購買物品", 739 | [5013]="班級物品裝扮", 740 | [5014]="查看自己的班級列表", 741 | [5015]="班級上鎖", 742 | [5016]="班級解鎖", 743 | [5017]="獲取班級信息", 744 | [5018]="查看班級成員列表", 745 | [5019]="班級排行中的班級記錄個數", 746 | [5020]="查看班級榮譽歷史", 747 | [5400]="開始答題", 748 | [5401]="獲取題目", 749 | [5402]="客戶端答題", 750 | [5403]="查看班級積分", 751 | [5404]="班長領award", 752 | [5405]="班級成員領", 753 | [5500]="申請獲得超級拉姆", 754 | [5501]="能否申請獲得超級拉姆", 755 | [5502]="暑假大放送", 756 | [5503]="挖石頭的總次數", 757 | [5504]="交給門衛稱石頭", 758 | [5600]="火神盃報名", 759 | [5601]="完成前置任務", 760 | [5602]="賽前打氣", 761 | [5603]="火神盃隨即報名", 762 | [5604]="火神盃任務狀態", 763 | [5605]="火神盃接任務", 764 | [5606]="火神盃完成任務", 765 | [5607]="火神盃獎牌榜", 766 | [5608]="查詢澆了幾次水", 767 | [5609]="領隊服", 768 | [5610]="得到第一塊獎牌時獎勵", 769 | [5611]="到達每天上限後領獎", 770 | [5612]="機會轉盤", 771 | [5613]="獎牌榜", 772 | [5614]="火炬狀態", 773 | [5615]="點燃火炬", 774 | [5616]="點燃火炬", 775 | [5700]="超拉派對獲取物品", 776 | [6001]="拉姆食品制造機", 777 | [6002]="拉姆教室聯誼", 778 | [6003]="送禮物給朋友", 779 | [6004]="查詢排名", 780 | [6005]="收到別人送的東西,查詢送東西的記錄", 781 | [6006]="取得物品,扣除自己有的物品", 782 | [6007]="查詢物品數量", 783 | [6020]="伺服器每分鐘同步一次時間,", 784 | [6021]="腳印兌換物品", 785 | [6022]="拉取2011腳印信息", 786 | [6023]="拉取2011腳印數量信息", 787 | [6024]="連續登錄信息", 788 | [6025]="拉取投票信息", 789 | [6026]="查看連續30天登錄信息", 790 | [6027]="收到校巴郵件", 791 | [6028]="收到校巴郵件", 792 | [6029]="進入或退出摩爾勇士", 793 | [6030]="拉取玩摩爾勇士的玩家信息", 794 | [6031]="拯救天使蛋", 795 | [6032]="獲取週末登錄獎勵", 796 | [6033]="獲取週末登錄次數", 797 | [6034]="統計平台消息", 798 | [6049]="MELON_IN_OR_OUT_QUERY", 799 | [6050]="MELON_GET_WAIT_QUERY", 800 | [6051]="MELON_CHECK_CURRENT_STATE", 801 | [6052]="MELON_ATTACK", 802 | [6053]="MELON_TO_HOME", 803 | [6054]="MELON_LEFT_GAME", 804 | [6055]="MELON_GAME_END", 805 | [6056]="MELON_GAME_COME_XIAOC", 806 | [6061]="MOMO_BUCHANG", 807 | [7001]="獲取天使園基本信息", 808 | [7002]="獲取天使園倉庫中物品", 809 | [7003]="獲取組件對應id和人次", 810 | [7004]="獲取戰鬥等級", 811 | [7005]="獲取戰鬥成績", 812 | [7006]="獲取天使醫院天使", 813 | [7007]="獲取戰鬥道具", 814 | [7010]="補充天使園靈氣", 815 | [7011]="天使出院", 816 | [7020]="使用天使園種子", 817 | [7021]="使用天使園道具", 818 | [7022]="使用天使園背景", 819 | [7023]="使用王子之淚", 820 | [7024]="使用戰鬥道具", 821 | [7030]="建立契約(收獲)", 822 | [7031]="契約建立前放生", 823 | [7032]="聖光獸轉化天使", 824 | [7040]="獲取天使園圖鑑", 825 | [7041]="契約後放生", 826 | [7042]="天使跟隨", 827 | [7050]="天使園升級", 828 | [7060]="獲取天使園遊客列表", 829 | [7061]="獲取好友天使園信息", 830 | [7070]="獲取玩家戰鬥天使數目", 831 | [7071]="戰鬥開始", 832 | [7072]="戰鬥結束", 833 | [7073]="遊戲開始", 834 | [7074]="成功淨化天使", 835 | [7076]="淨化黑暗天使戰鬥結束", 836 | [7077]="殺死怪物", 837 | [7078]="獲取天使,後台直接贈送", 838 | [7079]="展示天使", 839 | [7080]="回收展示的天使", 840 | [7081]="獲取天使收藏夾信息", 841 | [7082]="拉取使用的天使園背景", 842 | [7083]="生肖小屋領取大衛豆", 843 | [7084]="獲取天使榮譽信息", 844 | [7085]="領取榮譽獎勵", 845 | [7086]="通知獲得榮譽", 846 | [7087]="拯救怪物,獲取天使", 847 | [7089]="拉取合成天使所需材料", 848 | [7090]="合成天使", 849 | [7092]="靈萌巨樹抓蝴蝶", 850 | [7100]="啦啦隊活動用戶做動作", 851 | [7101]="一輪結束通知包", 852 | [7102]="查詢啦啦隊活動信息", 853 | [7105]="選擇冠軍豬", 854 | [7106]="查看選擇的豬是否是冠軍豬", 855 | [7107]="領取豬豬向前衝獎勵", 856 | [7200]="NEW_ANGEL_ENTER_PARK", 857 | [7201]="NEW_ANGEL_GET_BAG", 858 | [7202]="NEW_ANGEL_GET_PACKAGE", 859 | [7203]="NEW_ANGEL_INCUBATE", 860 | [7204]="NEW_ANGEL_CHANGE_NICK", 861 | [7205]="NEW_ANGEL_CHANGE_POSITION", 862 | [7206]="NEW_ANGEL_GET_INCUBATE", 863 | [7207]="NEW_ANGEL_MUTUAL", 864 | [7208]="NEW_ANGEL_CULTURE", 865 | [7209]="NEW_ANGEL_CULTURE_BACK", 866 | [7210]="NEW_ANGEL_FOLLOW", 867 | [7211]="NEW_ANGEL_USE_ITEM_FOR_PARK", 868 | [7212]="NEW_ANGEL_USE_ITEM_FOR_ANGEL", 869 | [7213]="NEW_ANGEL_GET_ITEMS", 870 | [7214]="NEW_ANGEL_GET_BOOK", 871 | [7215]="NEW_ANGEL_GET_BACK", 872 | [7218]="NEW_ANGEL_ADD_EXP", 873 | [7219]="NEW_ANGEL_MATE", 874 | [7220]="NEW_ANGEL_QUERY_FOLLOW_ANGEL", 875 | [7222]="NEW_ANGEL_FIGHT_PASS_TOLLGATE", 876 | [7223]="NEW_ANGEL_FIGHT_GET_AWARD", 877 | [7224]="NEW_ANGEL_GET_MOUNTS", 878 | [8001]="獲取藏寶閣展示品數據", 879 | [8002]="獲取藏寶閣(圖鑑)信息", 880 | [8003]="藏寶閣設定展示品", 881 | [8004]="藏寶閣展品位置交換", 882 | [8005]="藏寶閣好友信息", 883 | [8006]="藏寶閣遊客列表", 884 | [8008]="藏寶閣更改展示品方位", 885 | [8021]="挖寶,拉取當前地圖信息", 886 | [8022]="獲取探險背包信息", 887 | [8023]="請求挖開一塊區域", 888 | [8024]="請求拾取獎勵", 889 | [8025]="請求使用道具", 890 | [8027]="請求同步體力值", 891 | [8028]="挖礦隨機給玩家物品", 892 | [8040]="憤怒的拉姆獲取遊戲信息", 893 | [8041]="憤怒的拉姆提交通關數據", 894 | [8065]="時間囊寫信", 895 | [8066]="查看時間囊信件", 896 | [8067]="時間囊埋物品", 897 | [8068]="查看時間囊取物品", 898 | [8069]="查詢今天時間囊可以取的信和物品的數量", 899 | [8074]="查看畫冊信息", 900 | [8075]="保存畫冊信息", 901 | [8076]="查看用戶所有畫冊信息", 902 | [8078]="從好友家拿糖果", 903 | [8079]="領取分享糖果獎勵", 904 | [8081]="添加前端緩存數據", 905 | [8082]="查詢前端緩存的數據", 906 | [8083]="拼接藏寶地圖", 907 | [8084]="獲取已拼接地圖碎片數據", 908 | [8085]="獲取尋寶機會", 909 | [8086]="獲取鑰匙", 910 | [8087]="查詢可以獲取的鑰匙", 911 | [8088]="查詢是否可以領時間信息", 912 | [8089]="拉取多個DateType信息", 913 | [8090]="尋找幸運兒", 914 | [8095]="拉取VIP週連續登陸禮包信息", 915 | [8096]="領取連續登陸獎勵物品", 916 | [8097]="拉取週末連續登陸信息", 917 | [8098]="抽取獎勵", 918 | [8100]="進入蒙牛牧場", 919 | [8101]="蒙牛種植牧草", 920 | [8102]="蒙牛玩家與奶牛互動", 921 | [8103]="牛奶換獎勵", 922 | [8104]="投票", 923 | [8105]="拉取投票信息", 924 | [8106]="冰雪精靈龍強化", 925 | [8107]="肥肥館和分館交換豬", 926 | [8108]="制造能量灌輸儀", 927 | [8109]="開始或結束演講", 928 | [8110]="查詢誰在演講", 929 | [8200]="拉取基礎屬性", 930 | [8201]="拉取摩摩怪戰鬥背包", 931 | [8202]="拉取技能", 932 | [8203]="拉取摩摩怪戰鬥卡冊", 933 | [8204]="摩摩怪戰鬥使用道具", 934 | [8205]="摩摩怪戰鬥使用卡牌", 935 | [8206]="摩摩怪戰鬥技能升級", 936 | [8207]="更換天使或裝備", 937 | [8208]="摩摩怪戰鬥拉取所有好友信息", 938 | [8209]="摩摩怪戰鬥拉取所有好友戰鬥狀態", 939 | [8210]="摩摩怪戰鬥拉取某一地圖內所有關卡完成情況", 940 | [8211]="摩摩怪戰鬥拉取某一技能等級", 941 | [8212]="摩摩怪戰鬥校驗用戶是否可以翻牌", 942 | [8213]="摩摩怪戰鬥用戶翻牌", 943 | [8214]="摩摩怪戰鬥許願獲得收集品", 944 | [8215]="摩摩怪戰鬥實現好友願望", 945 | [8216]="摩摩怪戰鬥當前許願狀態", 946 | [8217]="摩摩怪戰鬥處理好友事件", 947 | [8218]="摩摩怪戰鬥拉取指定數量的好友對戰信息", 948 | [8219]="摩摩怪戰鬥拉取對戰記錄", 949 | [8220]="摩摩怪戰鬥領取許願收集品", 950 | [8221]="摩摩怪戰鬥拉取每日任務狀態", 951 | [8222]="摩摩怪戰鬥完成每日任務", 952 | [8223]="摩摩怪戰鬥刷新一個每日任務", 953 | [8224]="拉取boss每天戰鬥情況", 954 | [8225]="摩摩怪戰鬥拉取徒弟市場信息", 955 | [8226]="摩摩怪戰鬥拉取師徒信息", 956 | [8227]="摩摩怪戰鬥判斷是否可以收徒", 957 | [8228]="摩摩怪戰鬥拉取訓練信息", 958 | [8229]="摩摩怪戰鬥訓練徒弟", 959 | [8230]="摩摩怪戰鬥逐出師門", 960 | [8231]="摩摩怪戰鬥徒弟孝敬師傅(感謝金)", 961 | [8232]="摩摩怪戰鬥師傅領取感謝金", 962 | [8233]="摩摩怪戰鬥背叛師門", 963 | [8234]="摩摩怪戰鬥出師", 964 | [8235]="摩摩怪戰鬥師徒消息", 965 | [8236]="摩摩怪戰鬥收徒對戰結束後,用戶收徒弟", 966 | [8237]="摩摩怪戰鬥拉取PVP對戰次數及兌換記錄", 967 | [8238]="摩摩怪戰鬥PVP獲勝次數兌換成就卡", 968 | [8239]="摩摩怪戰鬥 捐獻卡片", 969 | [8240]="摩摩怪戰鬥 用捐獻值兌換卡片", 970 | [8241]="摩摩怪戰鬥 查詢捐獻值", 971 | [8250]="豬倌 養豬場信息", 972 | [8251]="豬倌 豬仔的詳細信息", 973 | [8252]="獲取指定玩家的可交配公豬信息", 974 | [8253]="豬倌 背包信息", 975 | [8255]="豬倌 養豬", 976 | [8256]="豬倌 餵食", 977 | [8257]="豬倌 洗澡", 978 | [8258]="豬倌 逗逗", 979 | [8259]="豬倌 訓練", 980 | [8260]="豬倌 設定名字", 981 | [8261]="豬倌 設定陣型", 982 | [8262]="豬倌 出售物品", 983 | [8263]="母豬交配", 984 | [8264]="豬倌 升級通知", 985 | [8265]="豬倌 獲取好友信息", 986 | [8266]="獲取任務信息", 987 | [8267]="接任務", 988 | [8268]="交任務", 989 | [8269]="豬倌 獲取公告牌信息", 990 | [8270]="生豬加工", 991 | [8271]="豬倌 隨機好運", 992 | [8272]="圖鑑", 993 | [8273]="建築升級", 994 | [8274]="豬倌 使用道具", 995 | [8275]="領取每日豬票", 996 | [8277]="豬倌 使用卡片", 997 | [8278]="豬倌 獲取卡片附加Buf", 998 | [8279]="收集裝扮領取豬", 999 | [8280]="豬倌 設置背景", 1000 | [8281]="豬倌 跟隨mole", 1001 | [8282]="獲取伸展台信息", 1002 | [8283]="豬仔表演", 1003 | [8284]="豬倌 拉取分館信息", 1004 | [8285]="豬倌 轉移豬到分館", 1005 | [8286]="美美鬥秀賽獲得獎勵", 1006 | [8287]="美美鬥秀賽查詢昨天、今天及總的鬥秀次數", 1007 | [8288]="美美鬥秀賽 主動通知 定時特定次數禮", 1008 | [8289]="美美鬥秀賽 領取特殊禮包獎勵", 1009 | [8290]="美美鬥秀賽比賽結果", 1010 | [8291]="查詢鬥秀賽成就狀態", 1011 | [8292]="領取鬥秀賽成就獎勵", 1012 | [8293]="肥肥稱重賽", 1013 | [8294]="查詢肥肥稱重賽獎勵領取狀況", 1014 | [8295]="兌換超級豬仔", 1015 | [8296]="拉取所有解鎖榮譽", 1016 | [8300]="保存形象", 1017 | [8301]="刪除形象", 1018 | [8302]="獲取形象列表", 1019 | [8320]="獲取vip 天使點亮信息", 1020 | [8321]="使用vip天使兌換祥雲九尾", 1021 | [8322]="CHERRY_RAIN_SURPLUS_FLOWER", 1022 | [8350]="愛心天使捐獻", 1023 | [8351]="CHARITY_DONATE_NOTIFY", 1024 | [8352]="GET_CHARITY_AUCTION_LIST", 1025 | [8353]="CHARITY_AUCTION", 1026 | [8400]="冬天和春天,攻擊其他隊伍玩家", 1027 | [8401]="冬天和春天,拉取隊伍熱度", 1028 | [8402]="ANGEL_KALUOLA_COLOR_LIST", 1029 | [8403]="ANGEL_KALUOLA_COLOR_RESULT", 1030 | [8404]="ANGEL_KALUOLA_TIME_AWARD", 1031 | [8406]="CANNON_ACTY_BROADCAST", 1032 | [8407]="CANNON_ACTY_SEAT", 1033 | [8408]="CANNON_ACTY_AWARD", 1034 | [8409]="ANGEL_KALUOLA_LUCKY", 1035 | [8410]="ANGEL_KALUOLA_LUCKY_LIST", 1036 | [8411]="ANGEL_KALUOLA_LUCKY_LIST_REQ", 1037 | [8412]="FIRE_DIG_EXP", 1038 | [8413]="ICE_DIF_EXP", 1039 | [8414]="CANNON_ACTY_SEND_RESULT", 1040 | [8423]="BUMPER_PACK_CAR", 1041 | [8424]="BUMPER_BUY_BEAN", 1042 | [8425]="BUMPER_PACK_ROBOT", 1043 | [8480]="FLOWER_FUNFEST_PICK", 1044 | [8481]="FLOWER_FUNFEST_INSERT", 1045 | [8482]="FLOWER_FUNFEST_OPEN_VIP", 1046 | [8483]="FLOWER_FUNFEST_CLOSE_VIP", 1047 | [8484]="FLOWER_FUNFEST_GET_AWARD", 1048 | [8485]="FLOWER_FUNFEST_GET_INFO", 1049 | [8486]="FLOWER_FUNFEST_UPDATE", 1050 | [8500]="ADVANCED_CLASS_CHANGE_SIGN", 1051 | [8501]="ADVANCED_CLASS_GET_AWARD", 1052 | [8502]="ADVANCED_CLASS_AREA_UPDATE", 1053 | [8503]="ADVANCED_CLASS_SET_SIT", 1054 | [8504]="ADVANCED_CLASS_GET_GAME_INFO", 1055 | [8505]="ADVANCED_CLASS_OPEN_AWARD", 1056 | [8506]="查詢肥肥館機械工坊信息", 1057 | [8507]="派豬去探礦", 1058 | [8508]="查詢能量豬探礦信息", 1059 | [8509]="能量豬煉礦", 1060 | [8510]="機床零件加工", 1061 | [8511]="完成熔爐或加工", 1062 | [8513]="機械工廠使用道具", 1063 | [8514]="獲取新手步驟", 1064 | [8515]="設置新手步驟", 1065 | [8516]="查詢任務", 1066 | [8517]="接受任務", 1067 | [8518]="完成任務", 1068 | [8519]="生產熔爐和機床", 1069 | [8524]="機械工廠隨機掉物品", 1070 | [8525]="保存裝飾", 1071 | [8526]="查看裝飾", 1072 | [8527]="投票", 1073 | [8528]="今日壽星面板", 1074 | [8529]="召回探礦的豬仔", 1075 | [8530]="製作生日蛋糕", 1076 | [8531]="發給自己蛋糕信息", 1077 | [8532]="製作蛋糕完成,獲取獎勵", 1078 | [8533]="發給所有人蛋糕信息", 1079 | [8534]="參加水晶舞會", 1080 | [8535]="水晶鬥舞,整個舞會現場信息", 1081 | [8536]="領取舞會獎勵", 1082 | [8537]="舞會比賽名次結果", 1083 | [8538]="隨機禮物", 1084 | [8539]="查詢可否獲得物品", 1085 | [8540]="設置麼麼合照", 1086 | [8541]="取麼麼合照", 1087 | [8542]="查看活動完成度", 1088 | [8543]="投水彈", 1089 | [8544]="廣播樹信息", 1090 | [8548]="擲骰子", 1091 | [8549]="禮花活動", 1092 | [8550]="查詢剩餘時間", 1093 | [8551]="查詢是否解鎖", 1094 | [8552]="製作潛艇獎勵", 1095 | [8553]="放飛小海馬", 1096 | [8557]="抽超級拉姆查詢剩餘時間", 1097 | [8560]="人魚國度查看階段次數", 1098 | [8561]="人魚國度查看階段次數", 1099 | [8564]="查看個人小遊戲信息", 1100 | [8565]="進入遊戲大廳", 1101 | [8569]="完成小遊戲編號", 1102 | [8570]="人魚國度 結束 領獎勵", 1103 | [8571]="遊戲王,領取獎勵", 1104 | [8572]="領取物品的狀態", 1105 | [8573]="貼宣傳單", 1106 | [8574]="查看木桶狀態", 1107 | [8575]="玩家扔水彈操作", 1108 | [8576]="扔水彈結束,掉出物品", 1109 | [8577]="玩家撿起出物品", 1110 | [8578]="查看摩天輪狀態", 1111 | [8579]="玩家搶佔位置", 1112 | [8580]="人數已滿,開始轉動", 1113 | [8581]="查詢樂園遊戲狀態", 1114 | [8582]="海底巨浪,換物品協議", 1115 | [8583]="查看泡澡、舞台展示", 1116 | [8584]="進入海底樂園參與活動", 1117 | [8585]="增加玩家海底樂園基本屬性", 1118 | [8586]="查看玩家海底樂園,前二十魅力排名", 1119 | [8587]="帕帕問答", 1120 | [8588]="海底樂園,查看自己的基本屬性", 1121 | [8589]="海底樂園,限時抽取大獎", 1122 | [8590]="海底樂園,查看完成狀態", 1123 | [8591]="泡澡增加魅力值", 1124 | [8592]="海底樂園, 查看暑假連續登陸禮包面板(8592)", 1125 | [8593]="海底樂園,暑假連續登陸禮包, 領取獎勵(8593", 1126 | [8594]="舞台投擲鮮花,雞蛋", 1127 | [8595]="船面板,點亮按鈕", 1128 | [8596]="船面板,領取大獎", 1129 | [8597]="查看摩爾星級", 1130 | [8598]="領取獎勵", 1131 | [8599]="查看已經邀請摩爾", 1132 | [8600]="摩爾大使領取獎勵", 1133 | [8601]="邀請摩爾成功", 1134 | [8602]="領取海妖王寶藏", 1135 | [8603]="關卡結束,增加經驗", 1136 | [8604]="開寶箱", 1137 | [8605]="進入關卡", 1138 | [8606]="查詢領取狀態", 1139 | [8607]="SET_SUN_FLOWER", 1140 | [8608]="領取海妖服", 1141 | [8609]="查看可歷練的海妖坐騎", 1142 | [8610]="歷練海妖坐騎", 1143 | [8611]="餵食海妖坐騎", 1144 | [8612]="拉取海底世界圖鑑", 1145 | [8613]="偷好友貝殼幣", 1146 | [8614]="置位領取狀態", 1147 | [8615]="進入地圖,查看禮炮狀態,(8615)-- (地圖廣播)", 1148 | [8616]="搶佔發射禮包位置,(8616)", 1149 | [8617]="摩爾領取禮包,(8617)", 1150 | [8618]="領取禮包後,頭頂標識,(8618)--- 全服廣播", 1151 | [8619]="給玩家禮物 (8619)", 1152 | [8620]="領取海妖坐騎", 1153 | [8621]="建設酒店, 玩小遊戲,提交分數(8621)", 1154 | [8622]="建設酒店,查詢小遊戲已達分數(8622)", 1155 | [8631]="達到六十分,入學通知書領取(8631", 1156 | [8632]="酒店接待員站崗", 1157 | [8633]="酒店接待員退出站崗", 1158 | [8635]="街頭藝人,查看位置狀態", 1159 | [8636]="街頭藝人,搶佔位置", 1160 | [8637]="街頭藝人,玩家捐獻藝人摩爾豆", 1161 | [8638]="捐獻藝人摩爾豆,--主動通知包(被捐獻的玩家)", 1162 | [8639]="街頭藝人,扮演角色滿8種,領取獎勵", 1163 | [8640]="領取雅典娜套裝", 1164 | [8654]="遊戲王優化 --- 活躍度排行", 1165 | [8655]="遊戲王優化 --- 各個小遊戲的活躍度", 1166 | [8656]="遊戲王優化 --- 根據上週排名,領取獎勵", 1167 | [8663]="主活動變身舞會", 1168 | [8664]="主活動跳竹竿舞", 1169 | [8670]="YEAR_MONSTER_FIGHT_NOTICE", 1170 | [8671]="YEAR_MONSTER_FIGHT_HIT", 1171 | [8672]="YEAR_MONSTER_FIGHT_AWARD", 1172 | [8673]="YEAR_MONSTER_FIGHT_HURT", 1173 | [8674]="YEAR_MONSTER_FIGHT_START_OR_EXIT", 1174 | [8676]="守衛心中的和平,查詢信息(8676)", 1175 | [8677]="守衛心中的和平,刷新關卡領養狀態(8677)", 1176 | [8678]="守衛心中的和平,領養天使(8678)", 1177 | [8679]="扔瓶子(8679)", 1178 | [8680]="拉取我發出的漂流瓶的回復(8680)", 1179 | [8681]="撿到別人發出的漂流瓶(8681)", 1180 | [8682]="回復漂流瓶(8682) (沒有返回)", 1181 | [8683]="歡樂猜燈謎,進入地圖(8683)", 1182 | [8684]="歡樂猜燈謎,玩家猜燈謎選NPC", 1183 | [8685]="歡樂猜燈謎,時間到公布燈謎答案(8685)", 1184 | [8686]="歡樂猜燈謎, 成功猜對燈謎玩家發放獎勵(8686)", 1185 | [8687]="牆來了,進入地圖 (包括主動廣播包)(8687)", 1186 | [8688]="牆來了,玩家選擇站台位置 (8688)", 1187 | [8689]="牆來了, 玩家切換動作(8689)", 1188 | [8690]="牆來了, 本輪遊戲結束---發放獎勵(主動廣播)(8690)", 1189 | [8691]="牆來了, 遊戲開始,結束(8691)", 1190 | [8692]="向左向右, 進入地圖(8692)", 1191 | [8693]="向左向右,玩家選擇站台位置(8693)", 1192 | [8694]="向左向右, 玩家指出當前方向(8694)", 1193 | [8695]="向左向右, 本輪遊戲結束---發放獎勵(8695)", 1194 | [8696]="向左向右, 遊戲開始(8696)", 1195 | [8697]="SCENE_ACTIVITY_BROADCAST", 1196 | [8698]="SCENE_ACTIVITY_SEAT", 1197 | [8699]="SCENE_ACTIVITY_AWARD", 1198 | [8700]="RAINBOW_RESIDUE_TIMES", 1199 | [8701]="RAINBOW_OPEN_GOLDBOX", 1200 | [8702]="查看每天簽到情況", 1201 | [8703]="領取累計簽到禮包", 1202 | [8704]="快速補簽", 1203 | [8705]="採摘波板糖(8705)", 1204 | [8706]="波板糖交到小醜(8706)", 1205 | [8707]="滿足條件70個,出現彩虹橋((8707)", 1206 | [8708]="進入彩虹橋地圖,十分鐘內領取物品(8708)", 1207 | [8709]="領禮物的次數(8709)", 1208 | [8711]="ROMANTIC_SCENE_ACTIVITY_SEND_RESULT | SCENE_ACTIVITY_SEND_RESULT", 1209 | [8712]="RK_VS_ZERO_ENTERMAP", 1210 | [8713]="RK_VS_ZERO_THROWWATER", 1211 | [8714]="RK_VS_ZERO_PRIZE", 1212 | [8715]="WATER_ACTIVITY_BROADCAST", 1213 | [8716]="MOLE_STANCE | WATER_ACTIVITY_SEAT", 1214 | [8717]="OX_RANK", 1215 | [8718]="OX_RANK_REWARD", 1216 | [8719]="SEAT_MUSIC", 1217 | [8720]="REFER_SEAT_MUSIC", 1218 | [8721]="SHOW__MUSIC", 1219 | [8722]="LIGHTEN_STAR", 1220 | [8723]="SHOVEL_CHIP", 1221 | [8724]="QUERY_INFO", 1222 | [8725]="LOVE_PARTY_NPC_INTER", 1223 | [8726]="LOVE_PARTY_PICK_PRIZE", 1224 | [8727]="LOVE_PARTY_SPACE", 1225 | [8728]="OX__100 | WATER_ACTIVITY_THROW_WOOD", 1226 | [8729]="WATER_ACTIVITY_RANK", 1227 | [8730]="GARDON_RANK_PRIZE", 1228 | [8731]="GARDON_GET_PRIZE", 1229 | [8732]="GARDON_MOVIE_COME", 1230 | [8733]="GARDON_THROW_FLOWER", 1231 | [8734]="SEARCH_DIARY_AWARD", 1232 | [8735]="SEARCH_DIARY_FRAGMENT", 1233 | [8736]="SAVAGE_DANCE_GAME_OVER", 1234 | [8740]="XISUO_COMBAIN", 1235 | [8749]="RANK_EAT_DUMPLING", 1236 | [8750]="QUERY_MAX_EAT_DUMPLING", 1237 | [8751]="EAT_DUMPLING_STATE", 1238 | [8752]="RECEIVE_REWARDS_OF_DUMPLINGS", 1239 | [8753]="ROLL_LUCKY_BAG_TIMES", 1240 | [8754]="ROLL_LUCKY_BAG_ID", 1241 | [8755]="COME_BK_STATUS", 1242 | [8756]="COME_BK_GET", 1243 | [8760]="NEW_RANK_COMMAND_SCORE", 1244 | [8761]="RANK_COMMAND", 1245 | [8763]="FISH_BUY_WAP", 1246 | [8764]="FISH_CATCH_FISH", 1247 | [8770]="MOLE_FASHION_MAKE", 1248 | [8771]="MOLE_FASHION_GET", 1249 | [8777]="GET_REWARD_IN_SCENE", 1250 | [8778]="GET_REWARD_FOR_GIFT_BAG", 1251 | [8785]="DRAGON_DANCE_ENTER_LEAVE", 1252 | [8786]="DRAGON_DANCE_PLAYER_INFO", 1253 | [8787]="DRAGON_DANCE_FULL_BROADCAST", 1254 | [8788]="AMOLE_INFO", 1255 | [8791]="NIUNIU_HAPPY_BUY", 1256 | [8792]="NIUNIU_HAPPY_CHECK", 1257 | [8793]="PROTO_USER_ENTER_LEAVE_STAND_GUARD_POS", 1258 | [8794]="PROTO_USER_GET_STAND_GUARD_INFO", 1259 | [8795]="ROSE_WISH_REQUIRE", 1260 | [8796]="ROSE_WISH_PRIZE", 1261 | [8797]="SAVAGE_DANCE_LEAVE_PANEL", 1262 | [8798]="SAVAGE_DANCE_CHOREOGRAPHY", 1263 | [8799]="SAVAGE_DANCE_DANCE", 1264 | [8800]="進入我的海洋", 1265 | [8801]="將魚苗放入海洋", 1266 | [8802]="給魚餵食", 1267 | [8803]="使用道具", 1268 | [8804]="海底擴容", 1269 | [8805]="拉取海底世界倉庫", 1270 | [8806]="裝飾我的海底世界", 1271 | [8807]="拉取寶箱貝殼", 1272 | [8808]="在線掉貝殼", 1273 | [8809]="玩家撿起貝殼", 1274 | [8810]="賣魚", 1275 | [8811]="購買", 1276 | [8812]="查看過關情況", 1277 | [8813]="保存當前過關", 1278 | [8814]="獲取圖鑑信息", 1279 | [8815]="得到好友信息", 1280 | [8816]="使用聲望領取物品", 1281 | [8817]="查看小遊戲步驟", 1282 | [8819]="查看,領取rk套裝", 1283 | [8820]="Cosplay大賽", 1284 | [8821]="Cosplay大賽查詢排行", 1285 | [8822]="Cosplay大賽前十獎勵", 1286 | [8823]="摩爾跳舞贊一下", 1287 | [8824]="摩爾人數", 1288 | [8825]="獲取給蓮池澆水施肥的用戶列表", 1289 | [8826]="摘一個蓮池果實", 1290 | [8827]="獲取蓮池信息", 1291 | [8828]="給蓮池澆水施肥", 1292 | [8829]="KFC_SURVEY", 1293 | [8832]="祝福送vip", 1294 | [8833]="開始經營酒店遊戲(8833)", 1295 | [8834]="經營酒店遊戲結束(8834)", 1296 | [8835]="酒店經營升級(8835)", 1297 | [8836]="MOMO_BIRTHDAY_ENTER_LEAVE", 1298 | [8837]="MOMO_BIRTHDAY_START_OVER", 1299 | [8838]="MOMO_BIRTHDAY_DELIVER", 1300 | [8839]="MOMO_BIRTHDAY_CHECK", 1301 | [8840]="時報投票", 1302 | [8841]="進入或離開位置點(8841", 1303 | [8842]="通知遊戲開始或結束(8842", 1304 | [8843]="燃放煙火", 1305 | [8844]="查詢遊戲參與用戶信息(8844", 1306 | [8845]="進入或離開位置點 (8845)", 1307 | [8846]="查詢遊戲參與用戶信息(8846)", 1308 | [8847]="位置全部站滿(8847)", 1309 | [8848]="夢境樹怪boss狀態(8848)", 1310 | [8849]="夢境樹怪和水彈boss狀態(8849)", 1311 | [8850]="夢境樹怪發動大技能(8850)", 1312 | [8851]="主動通知水彈的數量(8851)", 1313 | [8852]="完成smc職業關卡遊戲 (8852)", 1314 | [8853]="查詢smc經驗(8853)", 1315 | [8854]="Smc遊戲使用道具(8854)", 1316 | [8855]="查詢smc煉金師好友關卡分數排名(8855)", 1317 | [8856]="散落的黑暗種子活動領取獎勵(8856)", 1318 | [8857]="廣播消息", 1319 | [8858]="選彩蛋(8858)", 1320 | [8859]="查詢選擇彩蛋信息(8859)", 1321 | [8860]="查詢當前幸運彩蛋(8860)", 1322 | [8861]="領取彩蛋獎勵(8861)", 1323 | [8862]="查詢連續登陸信息(8862)", 1324 | [8863]="領取連續登陸獎勵(8863)", 1325 | [8865]="玩家主動秒殺(8865)", 1326 | [8866]="查詢玩家秒殺信息(8866)", 1327 | [8867]="查詢用戶投票信息(8867)", 1328 | [8868]="給用戶作品投票(8868)", 1329 | [8869]="米幣卡充值,領取獎勵禮包(8869)", 1330 | [8870]="TRANSFIGURATION_ROLE", 1331 | [8871]="TRANSFIGURATION_ROLE_NOTICE", 1332 | [8874]="LOTTERY_ROLL_DAIL", 1333 | [8875]="WINTERVACATION_1", 1334 | [8876]="WINTERVACATION_4", 1335 | [8877]="抽獎獲得米幣(8877)", 1336 | [8878]="拿紅包", 1337 | [8879]="WINTERVACATION_2", 1338 | [8880]="查詢用戶上次登錄的時間(8880)", 1339 | [8881]="查詢用戶在線領獎情況", 1340 | [8882]="邀請大使人數", 1341 | [8883]="邀請大使領取獎勵的協議", 1342 | [8884]="設置愛之花信息(8884)", 1343 | [8885]="查詢愛之花信息(8885)", 1344 | [8888]="給npc投票(8888)", 1345 | [8889]="查詢npc投票信息(8889)", 1346 | [8890]="獲取投票數量(8890)", 1347 | [8891]="DIRLL_TODAY_RECOMMEND", 1348 | [8892]="DIRLL_CALENDAR", 1349 | [8893]="DIRLL_TEST", 1350 | [8894]="DIRLL_START_OVER", 1351 | [8895]="LAMU_GAME_SIGN_UP | LAMU_SPORTS_APPLY", 1352 | [8896]="LAMU_GAME_WITCH_TEAM | LAMU_SPORTS_GET_SUIT", 1353 | [8897]="LAMU_GAME_CHANGE_TEAM | LAMU_SPORTS_CHANGE_TEAM", 1354 | [8900]="獲取正能量和清cd時間", 1355 | [8901]="SCHOOL_TERM_GIFT_GET", 1356 | [8902]="SCHOOL_TERM_GIFT_STATE", 1357 | [8903]="站上離開放煙火位置,全場景廣播", 1358 | [8904]="放煙火, 全場景廣播 (8904)", 1359 | [8905]="查詢煙火位置用戶信息(8905)", 1360 | [8906]="查詢頒獎(8906)", 1361 | [8907]="LAMUSOPRT_PERSONAL_CEREMONY", 1362 | [8908]="WISHING_WILL_GAME", 1363 | [8909]="LAMU_SPORTS_CHANGE_MEDAL", 1364 | [8910]="HAPPY_CAKE_GAME_START", 1365 | [8911]="HAPPY_CAKE_GAME_OVER", 1366 | [8914]="投鮮花(8914)", 1367 | [8915]="拉取鮮花排行榜(8915)", 1368 | [8916]="查看鮮花排行榜中的帖子信息(8916)", 1369 | [8917]="DISCARD_BOTTLE", 1370 | [8918]="見到的瓶子的回復信息(8918)", 1371 | [8919]="SET_PAY_PWD_STATE", 1372 | [8920]="GET_PAY_PWD_STATE", 1373 | [8921]="HAPPY_AIRBALL_FLAG", 1374 | [8922]="FIVEYEAR_BACKUSER_SET", 1375 | [8923]="FIVEYEAR_BACKUSER_GET", 1376 | [8924]="FIVEYEAR_BACKUSER_GETITEM", 1377 | [8925]="SEED_CHANGE_BATCH", 1378 | [8926]="SEED_BUY_SEED", 1379 | [8927]="SEED_FORMER_SEED", 1380 | [8928]="SEED_RANK_LIST", 1381 | [8930]="GUESS_WHAT_IS_LOVE_LIST | PARTY_MASK_MATERIAL_INFO", 1382 | [8931]="PARTY_MASK_GET_MATERIAL", 1383 | [8932]="PARTY_MAKE_MASK", 1384 | [8933]="MAKE_MASK_RANK", 1385 | [8935]="GET__BLESS", 1386 | [8936]="OPEN__BLESS", 1387 | [8937]="GET_SUPER_LAMU_CLOTHES", 1388 | [8938]="GET_LOVE_STAR", 1389 | [8939]="SHOW_LOVE", 1390 | [8940]="LOVE_FULL", 1391 | [8941]="GUESS_WHAT_IS_LOVE_SEARCH", 1392 | [8942]="GUESS_WHAT_IS_LOVE_SEND", 1393 | [8944]="SEEK_MOM_GET_CUR_LEVEL", 1394 | [8945]="SEEK_MOM_GAME_START", 1395 | [8946]="SEEK_MOM_SELECT", 1396 | [8947]="SEEK_MOM_GAME_PAUSE", 1397 | [8948]="SEEK_ADD_TIME", 1398 | [8949]="SEEK_RANK_CMD", 1399 | [8950]="ROMANTIC_MEET_SEAT", 1400 | [8951]="ROMANTIC_MEET_PRIZE", 1401 | [8952]="ROMANTIC_MEET_PRIZE_QUERY", 1402 | [8953]="PROTO_USER_GET_SEVEN_BOX", 1403 | [8954]="CIRCUS_CRAZED_GAME_OVER", 1404 | [8955]="CIRCUS_CRAZED_GAME_STATE", 1405 | [8957]="SPY_BROARDCAST | TUG_ACTY_BROADCAST", 1406 | [8958]="SPY_SEAT | TUG_ACTY_SEAT", 1407 | [8959]="TUG_ACTY_SEND_RESULT", 1408 | [8960]="MONTH_GIFT_20130605", 1409 | [8961]="MAGIC_SEAL_GET_PRIZE", 1410 | [8962]="MAKE_FLOWER", 1411 | [8963]="FLOWER_IS_LOCKED", 1412 | [8964]="TRAINING_BOARDCAST", 1413 | [8965]="TRAINING_SEAT", 1414 | [8966]="TRAINING_ACT", 1415 | [8967]="TRAINING_AWARD", 1416 | [8968]="SPY_USER_CARD", 1417 | [8969]="SPY_GET_PRIZE", 1418 | [8970]="SPY_VOTE", 1419 | [8971]="SPY_SPEAK", 1420 | [8972]="SPY_SPEAK_BROADCAST", 1421 | [8973]="SPY_VOTE_RESULT_BROADCAST", 1422 | [8974]="GET_KNIGHT_TRANSFER_STATE", 1423 | [8975]="KNIGHT_TRANSFER", 1424 | [8980]="SWIM_BROADCAST", 1425 | [8981]="SWIM_SEAT", 1426 | [8982]="SWIM_WORD_NUM", 1427 | [8983]="SWIM_DISTANCE_BROADCAST", 1428 | [8984]="SWIM_GET_PRIZE", 1429 | [8985]="ELEMENT_ADD_STRENGTH", 1430 | [8986]="ELEMENT_GRASP_SKILL", 1431 | [8987]="ELEMENT_MERGE_CARD", 1432 | [8988]="ELEMENT_ADVANCE_CARD", 1433 | [8989]="ELEMENT_PVE_CHALLENGE", 1434 | [8990]="ELEMENT_KNIGHT_INFO", 1435 | [8991]="ELEMENT_KNIGHT_SWAP_CARD", 1436 | [8992]="ELEMENT_TOLLGATE_WAVE", 1437 | [8993]="ELEMENT_RANDOM_TOLLGATE", 1438 | [8995]="ELEMENT_PVP_CHALLENGE", 1439 | [8996]="ELEMENT_PVP_ARENA_RECOMMAND", 1440 | [8997]="ELEMENT_PVP_ARENA_RANK", 1441 | [8998]="FIRE_GOD_TEST_INFO", 1442 | [8999]="GET_FIRE_GOD_REWARD", 1443 | [9003]="CREAM_BROARDCAST", 1444 | [9004]="CREAM_SEAT", 1445 | [9005]="CREAM_PRIZE", 1446 | [9006]="ELEMENT_CHOOSE_ARMY", 1447 | [9007]="ELEMENT_PLACE_VOTE", 1448 | [9008]="DAILY_KNIGHT_TASK", 1449 | [9009]="DAILY_KNIGHT_PRIZE", 1450 | [9010]="GO_ARMY_PRIZE", 1451 | [9012]="ELEMENT_PVP_REWARD", 1452 | [9013]="ELEMENT_PVP_CHALLENGE_RECORD", 1453 | [9015]="ELEMENT_USE_EXPRIENCE_ITEM", 1454 | [9016]="ELEMENT_REPUTAION_SHOP", 1455 | [9017]="ELEMENT_SEARCH_REPUTAION", 1456 | [9018]="ELEMENT_PVP_CHALLENGE_REPLAY", 1457 | [9100]="MUSHROOM_COOK_CAST", 1458 | [9101]="MUSHROOM_COOK_SEAT", 1459 | [9102]="MUSHROOM_COOK_AWARD", 1460 | [9103]="MOLE_ATT_BROADCAST", 1461 | [9104]="MOLE_ATT_SEAT", 1462 | [9105]="MOLE_ATT_SCORE_UPDATE", 1463 | [9106]="MOLE_ATT_GET_PRIZE", 1464 | [9107]="BREATH_ATT_BROADCAST", 1465 | [9108]="BREATH_ATT_SEAT", 1466 | [9109]="BREATH_ATT_GET_PRIZE", 1467 | [9110]="BREATH_ATT_WIN_LOSE", 1468 | [9126]="MOLIYA_CHOICE_INDEX", 1469 | [9133]="CHOICE_TOPIC_INDEX", 1470 | [9135]="MoonCake_GET_PRIZE", 1471 | [9136]="MoonCake_RankList", 1472 | [9142]="VISIT_OVER_PRIZE", 1473 | [9145]="DOUBLE_FLIP_INTO_MAP | SEC_KILL_NUM", 1474 | [9146]="DOUBLE_FLIP_HANDLE_SEAT", 1475 | [9147]="DOUBLE_FLIP_GET_DATA", 1476 | [9148]="DOUBLE_FLIP_SELECT_CARD", 1477 | [9149]="DOUBLE_FLIP_GET_REWARD", 1478 | [9156]="TAKE_MEME_STATE", 1479 | [9158]="GET_TAKE_MEME_PRIZE", 1480 | [9159]="NEW_RANK_COMMAND", 1481 | [9160]="KFC_SIGNUP_STATUS", 1482 | [9161]="BONFIRE_STHROW_WATER", 1483 | [9162]="BONFIRE_PICKUP_GIFT", 1484 | [9163]="BONFIRE_SHOW_WATER_STATE", 1485 | [9164]="BONFIRE_GETUP_LEAVE_CHAIR", 1486 | [9165]="BONFIRE_GAME_INFO_STATE", 1487 | [9166]="KFC_VOTE_INFO_GET", 1488 | [9167]="KFC_VOTE_VOTE_PlAYER", 1489 | [9168]="BONFIRE_REWARD_GIRT", 1490 | [9202]="ICEFESTIVAL_EXCHANGE", 1491 | [9204]="DANDAN_PRIZE_ITEM", 1492 | [9205]="BIG_WHELL_NEW_YEAR", 1493 | [9206]="PAIPAIZHAN_IN_SCENE", 1494 | [9207]="PAIPAIZHAN_SEAT", 1495 | [9208]="PAIPAIZHAN_GET_REWARD", 1496 | [9211]="GODDESS_OVER_TASK", 1497 | [9212]="LION_DANCE_HANDLE_SEAT", 1498 | [9213]="LION_DANCE_INTO_MAP", 1499 | [9214]="LION_DANCE_PUNCHES_REWARD", 1500 | [9215]="LION_DANCE_PUNCHES", 1501 | [9216]="SESAME_REWARD", 1502 | [9217]="GUESS_GAME_ANSWER", 1503 | [9218]="GUESS_GAME_TIME", 1504 | [9219]="GUESS_GAME_REWARD", 1505 | [9222]="GODDESS_IN_MAP", 1506 | [9223]="GODDESS_GET_REWARD", 1507 | [9224]="GODDESS_SUC_ONE", 1508 | [9225]="ELEMENT_CLEAR_TOLLGATE_WARE", 1509 | [9226]="FLAPPY_LAMU_REWARD", 1510 | [9227]="FLAPPY_LAMU_RANK", 1511 | [9234]="ACT_USER_SEAT", 1512 | [9235]="ACT_ENTER_MAP", 1513 | [9236]="ACT_USER_GAME", 1514 | [9237]="ACT_USER_PRIZE", 1515 | [9238]="CATCH_ANIMAL_COMMAND", 1516 | [9239]="CATCH_ANIMAL_PRIZE", 1517 | [9241]="STAR_RAIN_ENTER_MAP", 1518 | [9242]="STAR_RAIN_GET_PRIZE", 1519 | [9243]="STAR_DICE_GAME", 1520 | [9245]="NEW_STATICS_PLANT", 1521 | [9247]="FLOWER_APPRECIATE_SELECT_INDEX", 1522 | [9248]="FLOWER_APPRECIATE_GAME_OVER", 1523 | [9252]="FLOWER_APPRECIATE_PROGRAM_INDEX", 1524 | [9253]="cli_proto_flower_luck_draw | INVITATION_GO_GET", 1525 | [9254]="LAXIN_NEW_PLAYER_REGISTER", 1526 | [9255]="LAXIN_NEW_PLAYER_GET_PRIZE", 1527 | [9256]="LAXIN_INVITED_NUM", 1528 | [9257]="TEN_ROLL_PRIZE", 1529 | [9258]="FLY_BACK_PRINCER_PRIZE", 1530 | [9259]="SWEET_TRAVEL", 1531 | [9260]="SIX_YEAR_TOLLY_SEND", 1532 | [9266]="ROMANTIC_SIXYESRS_PROGRAM", 1533 | [9267]="ROMANTIC_SIXYEARS_ANSWER", 1534 | [9268]="ROMANTIC_SIXYEARS_REPLY_STATE", 1535 | [9269]="COOKIE_MORRA_ACTY_GAME_BROKEN", 1536 | [9271]="COOKIE_MORRA_ACTY_INVITE", 1537 | [9272]="COOKIE_MORRA_ACTY_AGREE", 1538 | [9273]="COOKIE_MORRA_ACTY_INFO", 1539 | [9274]="COOKIE_MORRA_ACTY_BEGIN_GAME", 1540 | [9275]="COOKIE_MORRA_ACTY_VS_RESULT", 1541 | [9276]="COOKIE_MORRA_ACTY_ROUND_END", 1542 | [9277]="LOVELY_MAID_GAME_CHOOSE", 1543 | [9278]="LOVELY_MAID_TRAVAL", 1544 | [9279]="LAND_ONLINE_DATA_PLANT", 1545 | [9280]="COOKIE_MORRA_ACTY_JOIN_GAME", 1546 | [9282]="WISH_GOLDFISH", 1547 | [9283]="GLODFISH_MAZE_GOING_COUNT", 1548 | [9284]="STATICS_PLAYER_INTRO", 1549 | [9285]="SIX_STAR_PANEL_OPEN", 1550 | [9287]="PURSUE_USER_ENTER_LEAVE_STAND_GUARD_POS", 1551 | [9288]="PURSUE_USER_GET_STAND_GUARD_INFO", 1552 | [9290]="PURSUE_CHERRY_RAIN_SURPLUS_FLOWER", 1553 | [9291]="SMALL_C_GUESS_PRIZE", 1554 | [9292]="HIDE_AND_SEEK_PRIZE", 1555 | [9293]="HIDE_AND_SEEK_RUG", 1556 | [9296]="FOR_FARM_GUARD", 1557 | [9297]="FOR_FARM_GUARD_INFO", 1558 | [10001]="相同帳號登入強迫退出", 1559 | [10002]="againLogin", 1560 | [10003]="文本通知", 1561 | [10004]="newsMessage", 1562 | [10005]="遊戲開始", 1563 | [10006]="遊戲結束", 1564 | [10007]="重定向到GameServer", 1565 | [10008]="場景道具變化", 1566 | [10009]="獲得小屋內有多少人", 1567 | [10011]="時間問候", 1568 | [10012]="判斷並更新人物相關屬性", 1569 | [10013]="更新五項基本屬性", 1570 | [10015]="被加入黑名單", 1571 | [10016]="CONNECT_GAME_SERVER_REQ", 1572 | [10101]="請求是否完成某件事", 1573 | [10102]="完成某件事後更新後台", 1574 | [10103]="寵物相關", 1575 | [10104]="拉取NPC總聲望 | 查詢某些東西的個數", 1576 | [10201]="對某嚮導投票", 1577 | [10301]="獲取系統時間", 1578 | [10302]="注冊會員跳轉頁面session", 1579 | [10303]="查看VIP信息", 1580 | [10304]="消費金豆更新超拉信息", 1581 | [11001]="通過roc查看生日等信息是否提交", 1582 | [11002]="神奇密碼", 1583 | [11003]="提交神奇密碼", 1584 | [11004]="買實物玩具", 1585 | [11005]="SET_POLICEJOB_FLAG", 1586 | [11006]="OVERONE_POLICEJOB", 1587 | [11007]="CHARITY_BEAN_NOTIFY", 1588 | [11008]="PASSWORD_BOUND", 1589 | [11009]="通用狀態標記", 1590 | [11010]="CLI_PROTO_INIT_PLAYER_EX", 1591 | [11013]="MAGICSPRITE_BATTLE_SRV_ERROR", 1592 | [11014]="MAGICSPIRIT_GET_FRIEND_LIST", 1593 | [11015]="MAGICSPIRIT_GET_INFO_FOR_USERID", 1594 | [11016]="GET_BIG_REWARD", 1595 | [11017]="WORLD_CUP_GUESS", 1596 | [11018]="GET_WORLD_CUP_REWARD", 1597 | [11019]="通用狀態標記", 1598 | [11020]="cli_proto_dark_energy_op", 1599 | [11021]="GET_ITEM_REQUET", 1600 | [11022]="MOLE_LEVEL_UP_NOTI", 1601 | [11023]="MAGICSPIRIT_NEWBIE_GUIDE_STEP", 1602 | [11025]="FREE_GOLDEN_BEAN", 1603 | [11026]="GOLDEN_BEAN_REWARD", 1604 | [11028]="MAGICSPIRIT_CHANGE_RANDOM_ALLY", 1605 | [11029]="MAGICSPIRIE_ADD_FRIEND", 1606 | [11030]="cli_proto_get_mainui_info", 1607 | [11031]="cli_proto_mainui_get_energy", 1608 | [11032]="MAGICSPIRITE_ACHIEVEMENT", 1609 | [11033]="MAGICSPIRITE_ACHIEVEMENT_GET_REWARD", 1610 | [11034]="FILL_SEAL", 1611 | [11035]="MAGICSPIRITE_ACHIEVEMENT_OVER_ALERT", 1612 | [11037]="MAGICSPIRITE_HAVE_SPIRITE", 1613 | [11039]="MAGICSPIRITE_ACTIVITY_PROGRESS", 1614 | [11040]="MAGICSPIRITE_RANK_WORSHIP", 1615 | [11041]="MAGICSPIRITE_RANK_GET_REWARD", 1616 | [11042]="CLI_PROTO_GENERAL_VOTE", 1617 | [11043]="MAGICSPIRITE_GET_BY_NPC", 1618 | [11044]="MAGICSPIRITE_CALLED", 1619 | [11045]="SYNCHRONOUS_MONEY", 1620 | [11046]="CLI_PROTO_DEFENSE_TRAIN_OP", 1621 | [11047]="LIAN_LIAN_KAN", 1622 | [11048]="MAGICSPIRITE_WORLD_BOSS_HP", 1623 | [11049]="MAGICSPIRITE_WORLD_BOSS_REWARD", 1624 | [11050]="MAGICSPIRITE_WORLD_BOSS_CLEAR_CD_TIME", 1625 | [11052]="MAGICSPIRITE_WORLD_BOSS_GET_CLOTH", 1626 | [11053]="FIRE_CUP_SECRETE", 1627 | [11054]="CLI_PROTO_GET_EX_RANKING_LIST_BY_ORDER", 1628 | [11055]="cli_proto_use_plug_in_noti", 1629 | [11056]="MAGICSPRITE_PVP_CREATE_BTL", 1630 | [11057]="MAGICSPRITE_PVP_PLAYER_READY", 1631 | [11059]="MAGICSPRITE_PVP_READY_NOTI", 1632 | [11060]="MAGICSPRITE_PVP_CLEAR_RESULT", 1633 | [11061]="MAGICSPRITE_PVP_USE_SKILL", 1634 | [11062]="MAGICSPRITE_PVP_TRANSMIT_INFO_NOTI", 1635 | [11063]="MAGICSPRITE_PVP_END_BTL", 1636 | [11064]="MAGICSPRITE_PVP_BTL_END_NOTI", 1637 | [11066]="GET_LEVEL_ID", 1638 | [11067]="ID_11067", 1639 | [11068]="MAGICSPRITE_PVP_START_NOTI", 1640 | [11069]="CLI_PROTO_JOIN_PVP_OP", 1641 | [11070]="CLI_PROTO_GET_RANKING_LIST_BY_RANK", 1642 | [11071]="CLI_PROTO_GET_PVP_REWARD", 1643 | [11072]="CLI_PROTO_GET_FAIRY_PVP_FIGHT_LOG", 1644 | [11078]="CLI_GET_CLIMB_MOON_REWARD", 1645 | [11079]="CLI_PROTO_FINISH_GAME", 1646 | [11080]="BUTTERFLY_GET_FRIEND_BELSS | cli_proto_get_friend_relation", 1647 | [11081]="BUTTERFLY_GET_RANDOM_GOODS", 1648 | [11082]="BUTTERFLY_ACTION", 1649 | [11083]="BUTTERFLY_GET_FRIEND_BLESSINFO", 1650 | [11084]="cli_proto_get_activity_friend", 1651 | [11085]="ID_11085", 1652 | [11086]="ID_11086", 1653 | [11087]="ID_11087", 1654 | [11088]="ID_11088", 1655 | [11089]="ID_11089", 1656 | [11090]="ID_11090", 1657 | [11091]="ID_11091", 1658 | [11092]="CLI_PEOTO_TRANSFORM_DRAGON | ID_11092", 1659 | [11093]="ID_11093", 1660 | [11094]="MOLING_PVP_KILL_RANK", 1661 | [11095]="ID_11095", 1662 | [11096]="ID_11096", 1663 | [11097]="ID_11097", 1664 | [11098]="ID_11098", 1665 | [11099]="ID_11099", 1666 | [11100]="CLI_PROTO_NIUDANJI_DRAW", 1667 | [11101]="火神盃", 1668 | [11102]="火神盃??", 1669 | [11103]="火神盃??", 1670 | [11104]="火神盃??", 1671 | [11105]="火神盃??", 1672 | [11106]="ID_11106", 1673 | [11107]="ID_11107", 1674 | [11108]="ID_11108", 1675 | [11109]="ID_11109", 1676 | [11110]="ID_11110", 1677 | [11111]="ID_11111", 1678 | [11112]="ID_11112", 1679 | [11115]="cli_proto_wanshenjie_comeback", 1680 | [11118]="for_cli_requet", 1681 | [11119]="ID_11119", 1682 | [11120]="通用狀態標記", 1683 | [11121]="cli_proto_wansheng_jingxiahe_op", 1684 | [11122]="ID_11122", 1685 | [11123]="CLI_PROTO_QUERY_FIFTY_CHARGECARD", 1686 | [11124]="CLI_PROTO_GET_FIFTYCARD_REWARD", 1687 | [11125]="CLI_PROTO_HOME_RESEARCH_OP", 1688 | [11208]="變成僵屍和蝙蝠", 1689 | [11209]="僵屍蝙蝠超時恢復", 1690 | [11210]="拿糖果", 1691 | [11211]="獲得金鑰匙", 1692 | [12000]="MAGICSPIRIT_SET_TEAM", 1693 | [12004]="MAGICSPIRIT_USER_INFO", 1694 | [12005]="MAGICSPIRIT_RANDOM_ALLY", 1695 | [12006]="MAGICSPIRIT_CHOSE_ALLY", 1696 | [12007]="MAGICSPRITE_CREATE_BTL", 1697 | [12008]="MAGICSPRITE_PLAYER_READY", 1698 | [12009]="MAGICSPRITE_BTL_READY_NOTI", 1699 | [12010]="MAGICSPRITE_LEAVE_BTL", 1700 | [12011]="MAGICSPRITE_START_BTL_NOTI", 1701 | [12012]="MAGICSPRITE_END_BTL_NOTI", 1702 | [12013]="MAGICSPRITE_TRANSMIT_INFO_NOTI", 1703 | [12014]="MAGICSPRITE_NEXT_STAGE_NOTI", 1704 | [12015]="MAGICSPRITE_MONSTER_DROP_ITEMS_NOTI", 1705 | [12016]="MAGICSPRITE_CLEAR_RESULT_REQUEST", 1706 | [12017]="MAGICSPRITE_USE_SKILL", 1707 | [12018]="MAGICSPIRIT_BAG_INFO", 1708 | [12019]="MAGICSPIRIT_SET_FIGHT_STATIC", 1709 | [12020]="MAGICSPIRIT_LEVEL_INFO", 1710 | [12021]="MAGICSPIRIT_STRENGTHEN", 1711 | [12022]="MAGICSPIRIT_ADVANCE", 1712 | [12023]="MAGICSPIRIT_BAG_FULL", 1713 | [12025]="MAGICSPIRITE_CALL_SPIRITE", 1714 | [12031]="GET_RANK_DATA", 1715 | [12032]="GET_RANK_AND_SCORE", 1716 | [12033]="GET_YES_REWARD", 1717 | [12034]="MAGICSPIRIT_NEWBIE_SELL_SPIRITE", 1718 | [12035]="GET_RANK_LENGTH", 1719 | [12036]="cli_proto_jing_ji_road_rand_task_cmd", 1720 | [12037]="cli_proto_jing_ji_road_gift_cmf", 1721 | [12038]="DONATE_FISH", 1722 | [12039]="FISH_REWARD", 1723 | [12042]="cli_proto_recoder_older_entrust_times", 1724 | [12043]="cli_proto_get_wake_up_gods_gift", 1725 | [12046]="CHANGE_TEAM", 1726 | [12047]="MOVIE_PLAY", 1727 | [12049]="MOLE_FAIRY_INVITATION_FRIEND", 1728 | [12051]="MOLE_INVITATION_SERVER_PUSH", 1729 | [12053]="CLI_PROTO_GET_OTHER_NICK", 1730 | [12054]="CLI_PROTO_TEACHERS_DAY_GIFT", 1731 | [12056]="LAMU_MOONCAKE_PARTY", 1732 | [12058]="BUY_VOUCHER_CHARGE", 1733 | [12059]="CLI_PROTO_ANNOYING_SPHERE", 1734 | [12060]="CLI_PROTO_FASHION_ANIMAL_COMPETITION", 1735 | [12061]="CLI_PROTO_GET_FASHION_COMPETITION_GIFT", 1736 | [12062]="THROW_FIRECRACKER", 1737 | [12063]="THROW_FIRECRACKER_REACH", 1738 | [12064]="OBTAIN_FIRECRACKER_NUM", 1739 | [12065]="CLI_PROTO_GET_DAILY_BUF_INFO", 1740 | [12067]="GET_CAT_STATUS", 1741 | [12068]="CAT_SEAT", 1742 | [12069]="CAT_SEAT_OPERATE", 1743 | [12070]="CAT_SEAT_FINISH", 1744 | [12072]="CAT_SEAT_GAME_START", 1745 | [12073]="CAT_SEAT_ERROR", 1746 | [12074]="CLI_PROTO_FIERCE_BATTLE_NIGHT_GET_BLOOD", 1747 | [12075]="CLI_PROTO_FIERCE_BATTLE_NIGHT_BATTLE", 1748 | [12076]="CLI_PROTO_FIERCE_RANDS_TEAM", 1749 | [12077]="CLI_PROTO_FIERCE_BATTLE_EAT_SWEET", 1750 | [12078]="CLI_PROTO_FIERCE_BATTLE_NIGHT_RAND", 1751 | [12079]="CLI_PROTO_FIRECE_BATTLE_NIGHT_GET_SWEET", 1752 | [12082]="cli_proto_cat_monster_battle_set_leave", 1753 | [12083]="cli_proto_cat_monster_battle_notify_status", 1754 | [12084]="cli_proto_cat_monster_battle_search_status", 1755 | [12086]="cli_proto_monopoly_notify_players", 1756 | [12087]="CLI_PROTO_SNAKE_OUT_OF_HOLE_GET_GIFT", 1757 | [12088]="CLI_PROTO_PRINCESS_FLOWER_RING_GIVE", 1758 | [12089]="CLI_PROTO_PRINCESS_FLOWER_RING_THREE", 1759 | [12090]="CLI_PROTO_LADDER_GIFT", 1760 | [12091]="CLI_PROTO_LADDER_GIFT_GET_SCORE", 1761 | [12092]="CLI_PROTO_PRINCESS_FLOWER_SET_MOVE", 1762 | [12093]="PROTO_BATTLE_BLACK_PERSONS", 1763 | [12094]="PROTO_DISAPPEAR_GIFT", 1764 | [30001]="CHECK_GAME_SER | USERREQ_ENTER_GAME", 1765 | [30002]="NOTICE_USER_NEWUSER_ENTERGAME", 1766 | [30003]="USERREQ_LEAVEA_GAME", 1767 | [30004]="NOTICE_GAME_START", 1768 | [30005]="NOTICE_GAME_OVER", 1769 | [30006]="USER_GET_GAME_SCORE", 1770 | [30007]="PLAY_FAIL", 1771 | [30008]="NOTICE_PLAY_FAIL", 1772 | [30009]="LOOKER", 1773 | [30010]="CHINESECHESS_ACTION", 1774 | [30011]="CHINESECHESS_BEGIN", 1775 | [30012]="CHINESECHESS_WIN", 1776 | [30013]="CHINESECHESS_LOOKER", 1777 | [30500]="FIGHT_ORDER", 1778 | [30501]="FIGHT_RESULT", 1779 | [30502]="FIGHT_BEGIN", 1780 | [30503]="FIGHT_ROUND_BEGIN", 1781 | [30504]="FIGHT_GAME_OVER", 1782 | [30505]="FIGHT_ChANGE_PEOPLE", 1783 | [30506]="FIGHT_GET_AWARD", 1784 | [30600]="SIX_CHESS", 1785 | [30611]="BLOW_CANDLE", 1786 | [30613]="CANDLE_MATERIAL_SUC", 1787 | [30617]="LLK_CHECK_ACTION", 1788 | [31001]="RANDMMAP", 1789 | [31002]="SENDALLMAP", 1790 | [31003]="FINISHMAP", 1791 | [31004]="CLENTBEGINGAME", 1792 | [31005]="CLENTACTION", 1793 | [31031]="FIVECHESS_GAMEBEGIN", 1794 | [31032]="FIVECHESS_ACTION", 1795 | [31033]="FIVECHESS_SUCCESS", 1796 | [31034]="NOTICE_LOOKER", 1797 | [32025]="PROTO_SNAKE_FRESHEN_NOTIFY", 1798 | [32026]="PROTO_SNAKE_RESERVE_NOTIFY", 1799 | [32027]="PROTO_SNAKE_SYNC_STATE", 1800 | [32028]="PROTO_SNAKE_SYNC_BEADS", 1801 | [32029]="PROTO_SNAKE_SYNC_PERSON", 1802 | [32030]="PROTO_MONOPOLY_SELECT_START_CMD", 1803 | [32031]="PROTO_MONOPOLY_START_THROW_CMD", 1804 | [32032]="PROTO_MONOPOLY_START_CMD", 1805 | [32033]="PROTO_MONOPOLY_THROW_END_CMD", 1806 | [32034]="PROTO_MONOPOLY_PALYER_SORT", 1807 | [32035]="PROTO_MONOPOLY_USE_ANGEL_GHOST_CARD_CMD", 1808 | [32036]="GAME_PROTO_FINDCAT_LAYOUT_NOTI", 1809 | [32037]="GAME_PROTO_FINDCAT_SELECT", 1810 | [32038]="GAME_PROTO_FINDCAT_RESULT_NOTI", 1811 | [32039]="PROTO_MONOPOLY_SYS_STATE", 1812 | [32040]="PROTO_MAGIC_BALL_PLAYER_POSITION", 1813 | [32041]="PROTO_MAGIC_BALL_SCORE", 1814 | [32042]="PROTO_MAGIC_BALL_POSITON_AND_THETA", 1815 | [40001]="領摩爾豆", 1816 | [60001]="當前場景蹺蹺板狀態", 1817 | [60002]="在蹺蹺板上移動", 1818 | [60003]="某人加入蹺蹺板", 1819 | [60006]="當前小醜表演", 1820 | [60007]="表演的獎品", 1821 | [60011]="遊戲結束告知玩家所得", 1822 | [60012]="遊戲結束全場景廣播下一題目", 1823 | [60013]="加入遊戲前,查詢遊戲中人物信息", 1824 | [60014]="遊戲中離開", 1825 | [60015]="拉取聖誕樹的狀態", 1826 | [60016]="拉取理發座位信息", 1827 | [60018]="食博會坐下離開位置", 1828 | [60019]="食博會點亮位置", 1829 | [60020]="獎品", 1830 | [-10009]="systemBusy", 1831 | [-10010]="loginOtherSpace", 1832 | [-10015]="Buyrepeat" 1833 | } 1834 | 1835 | mole_proto = Proto("Mole", "Mole Game Protocol") 1836 | 1837 | f_length = ProtoField.uint32("mole.length" , "Length" , base.DEC) 1838 | f_nonce = ProtoField.uint8( "mole.nonce" , "Nonce" , base.DEC) 1839 | f_command = ProtoField.uint32("mole.command" , "Command" , base.DEC) 1840 | f_user = ProtoField.uint32("mole.user" , "User" , base.DEC) 1841 | f_error = ProtoField.int32( "mole.error" , "Error" , base.DEC) 1842 | f_plain = ProtoField.bytes( "mole.plain" , "Plain") 1843 | mole_proto.fields = { f_length, f_nonce, f_command, f_user, f_error, f_plain } 1844 | 1845 | function decrypt(cipher) 1846 | local plen = #cipher - 1 1847 | local plain = "" 1848 | local ki = 1 1849 | for i=1, plen do 1850 | local ki2 = ki 1851 | if ki2 == 22 then ki2 = 1 end 1852 | local a = bit32.rshift(cipher:byte(i), 5) 1853 | local b = bit32.lshift(cipher:byte(i+1), 3) 1854 | local c = bit32.bor(a, b) % 256 1855 | local d = KEY:byte(ki2) 1856 | plain = plain .. string.char(bit32.bxor(c, d)) 1857 | ki = ki + 1 1858 | if ki == 23 then ki = 1 end 1859 | end 1860 | return plain 1861 | end 1862 | 1863 | function get_mole_pdu_length(tvb, pinfo, offset) 1864 | local length = tvb(offset, 4):uint() 1865 | return length 1866 | end 1867 | 1868 | function dissect_mole_pdu(tvb, pinfo, tree) 1869 | local length = tvb( 0, 4):uint() 1870 | local nonce = tvb( 4, 1):uint() 1871 | local command = tvb( 5, 4):uint() 1872 | local user = tvb( 9, 4):uint() 1873 | local errorr = tvb(13, 4):int() 1874 | local command_name = MAPPING[command] 1875 | if command_name == nil then command_name = "Unknown" end 1876 | pinfo.cols.protocol = mole_proto.name 1877 | pinfo.cols.info = command_name 1878 | local subtree = tree:add(mole_proto, tvb(), "Mole Game Protocol, Len: "..length..", Cmd: "..command..", User: "..user..", Error: "..errorr) 1879 | subtree:add(f_length , tvb( 0, 4)) 1880 | subtree:add(f_nonce , tvb( 4, 1)) 1881 | subtree:add(f_command , tvb( 5, 4), command, "Command: "..command.."\t("..command_name..")") 1882 | subtree:add(f_user , tvb( 9, 4)) 1883 | subtree:add(f_error , tvb(13, 4)) 1884 | local cipher_length = tvb(0, 4):uint() - 17 1885 | if cipher_length > 1 then 1886 | local plain = decrypt(tvb(17, cipher_length):raw()) 1887 | subtree:add(f_plain, tvb(17, cipher_length), plain) 1888 | end 1889 | return tvb:len() 1890 | end 1891 | 1892 | function mole_proto.dissector(tvb, pinfo, tree) 1893 | dissect_tcp_pdus(tvb, tree, MOLE_PDU_HEADER_LENGTH, get_mole_pdu_length, dissect_mole_pdu) 1894 | end 1895 | 1896 | tcp_table = DissectorTable.get("tcp.port") 1897 | -- 伺服器 1-6 1898 | tcp_table:add(1201, mole_proto) 1899 | -- 伺服器 7-30 1900 | tcp_table:add(1202, mole_proto) 1901 | --------------------------------------------------------------------------------