├── 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 |
--------------------------------------------------------------------------------