diff --git a/def.go b/def.go index 5449d44..66afe29 100644 --- a/def.go +++ b/def.go @@ -29,8 +29,9 @@ type ChatWarsMessageAuctionAnnounce struct { } type ChatWarsMessageMiniWar struct { - Report map[string]*ChatWarsMessageMiniWarCastle `json:"castle"` - Time time.Time `json:"time"` + ObjID64 int64 `json:"obj_id"` + Report map[string]*ChatWarsMessageMiniWarCastle `json:"castle"` + Time time.Time `json:"time"` } type ChatWarsMessageMiniWarCastle struct { @@ -99,6 +100,14 @@ const ( objTypeJob = 6 objTypeItem = 7 + castleDeer = 1 + castleDragon = 2 + castleHighnest = 3 + castleMoon = 4 + castlePotato = 5 + castleShark = 6 + castleWolf = 7 + objSubTypeMessageUnknown = 301 objSubTypeMessageWar = 302 objSubTypeMessageMiniWar = 303 diff --git a/sql.go b/sql.go index 3154803..18462d6 100644 --- a/sql.go +++ b/sql.go @@ -101,6 +101,15 @@ func initDB() { failOnError(err, "initDB : create table obj_guild") log.Println("initDB : obj_guild created ...") + _, err = db.Exec(`CREATE TABLE code_obj_castle ( + id SMALLINT UNSIGNED NOT NULL + ,user_id VARCHAR(32) NOT NULL + ,intl_id VARCHAR(32) NOT NULL + ,name VARCHAR(80) NOT NULL + ) ENGINE = InnoDB CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci;`) + failOnError(err, "initDB : create table obj_castle") + log.Println("initDB : obj_guild created ...") + _, err = db.Exec(`CREATE TABLE obj_war ( obj_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT ,start_time DATETIME NOT NULL @@ -168,6 +177,30 @@ func initDB() { failOnError(err, "initDB : create table obj_msg_auction_announce") log.Println("initDB : obj_msg_auction_announce created ...") + _, err = db.Exec(`CREATE TABLE obj_msg_mini_war ( + obj_id BIGINT UNSIGNED NOT NULL + ,date DATETIME NOT NULL + ,FOREIGN KEY (obj_id) REFERENCES obj(id) ON DELETE CASCADE + ,UNIQUE KEY (date) + ) ENGINE = InnoDB CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci;`) + failOnError(err, "initDB : create table obj_msg_mini_war") + log.Println("initDB : obj_msg_mini_war created ...") + + _, err = db.Exec(`CREATE TABLE obj_msg_mini_war_castle ( + obj_id BIGINT UNSIGNED NOT NULL + ,castle_id SMALLINT UNSIGNED NOT NULL + ,gardian TINYINT NOT NULL + ,result VARCHAR(8) + ,gold SMALLINT NOT NULL + ,stock SMALLINT NOT NULL + ,points SMALLINT NOT NULL + ,FOREIGN KEY (obj_id) REFERENCES obj(id) ON DELETE CASCADE + ,FOREIGN KEY (castle_id) REFERENCES code_obj_castle(id) ON DELETE CASCADE + ,UNIQUE KEY (obj_id, castle_id) + ) ENGINE = InnoDB CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci;`) + failOnError(err, "initDB : create table obj_msg_mini_war_castle") + log.Println("initDB : obj_msg_auction_announce created ...") + _, err = db.Exec(`CREATE TABLE obj_msg_auction_upd_req ( obj_id BIGINT UNSIGNED NOT NULL ,lot_id BIGINT UNSIGNED NOT NULL @@ -238,6 +271,18 @@ func initDB() { failOnError(err, "initDB : populate table code_obj_type") log.Println("initDB : code_obj_type populated ...") + _, err = db.Exec(`INSERT INTO code_obj_castle (id, intl_id, user_id, name) + VALUES (` + strconv.Itoa(castleDeer) + `, "deer", "🦌", "Deerhorn") + ,(` + strconv.Itoa(castleDragon) + `, "dragon", "🐉", "Dragonscale") + ,(` + strconv.Itoa(castleHighnest) + `, "highnest", "🦅", "Highnest") + ,(` + strconv.Itoa(castleMoon) + `, "moon", "🌑", "Moonlight") + ,(` + strconv.Itoa(castlePotato) + `, "potato", "🥔", "Potato") + ,(` + strconv.Itoa(castleShark) + `, "shark", "🦈", "Sharkteeth") + ,(` + strconv.Itoa(castleWolf) + `, "wolf", "🐺", "Wolfpack") + ;`) + failOnError(err, "initDB : populate table code_obj_castle") + log.Println("initDB : code_obj_castle populated ...") + _, err = db.Exec(`INSERT INTO code_obj_sub_type (id, intl_id, name, obj_type_id) VALUES (` + strconv.Itoa(objSubTypeMessageUnknown) + `, "unknown", "Unknown", ` + strconv.Itoa(objTypeMessage) + `) ,(` + strconv.Itoa(objSubTypeMessageWar) + `, "war", "War report", ` + strconv.Itoa(objTypeMessage) + `) @@ -1240,40 +1285,8 @@ func resetMsgParsingRules() { _, err = db.Exec(`INSERT INTO msg_rules (prio, msg_type_id, descn, rule) VALUES (5000, ` + strconv.Itoa(objSubTypeMessageReport) + `, "Player war report", "^(?P[🐉🦅🐺🦈🦌🥔🌑])(\\[(?P[A-Z]{3})\\]){0,1}(?P([A-Za-z0-9 ]*)) ⚔:(?P[0-9]+)(?P\\((-|\\+)[0-9]+\\)){0,1} 🛡:(?P[0-9]+) Lvl: (?P[0-9]+)\\nYour result on the battlefield:\\n(🔥Exp: (?P[0-9]+)\\n){0,1}(💰Gold: (?P\\-{0,1}[0-9]+)\\n){0,1}(📦Stock: (?P\\-{0,1}[0-9]+)){0,1}(\\n(?P(🔋Stamina restored))){0,1}(\\n(?P(⚡Critical strike))){0,1}$") ,(5000, ` + strconv.Itoa(objSubTypeMessageAuctionAnnounce) + `, "Auction annouce", "^Lot #(?P[0-9]+) : (?P.*)\\n(Quality: (?P.*)\\n){0,1}(Condition: (?P.*)\\n){0,1}Seller: (?P.*)\\nCurrent price: (?P[0-9]+) pouch\\(es\\)\\nBuyer: (?P.*)\\nEnd At: (?P.*)\\nStatus: (?P.*)(\\n)*(?s:.*)") - ,(5000, ` + strconv.Itoa(objSubTypeMessageTimeAck) + `, "Time", "^In Chat Wars world now\\n(?P