From 9e0b05caf76ce9ae7bf72081ce318b9652bf525e Mon Sep 17 00:00:00 2001 From: shoopea Date: Sun, 2 Jun 2019 14:48:16 +0800 Subject: [PATCH] testtest --- def.go | 27 ++++++++++------ obj.go | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ rules.go | 15 +++++++++ workers.go | 11 ++----- 4 files changed, 130 insertions(+), 17 deletions(-) diff --git a/def.go b/def.go index a62ac5a..8dd0329 100644 --- a/def.go +++ b/def.go @@ -58,6 +58,14 @@ type ChatWarsUser struct { Name string `json:"name"` } +type ChatWarsItem struct { + ObjID64 int64 `json:"obj_id"` + ItemTypeID int64 `json:"item_type_id"` + Code string `json:"code"` + Name string `json:"name"` + Weight int `json:"weight"` +} + type ChatWarsMessage struct { ObjID64 int64 `json:"obj_id"` UserID64 int64 `json:"user_id"` @@ -289,15 +297,15 @@ const ( objSubTypeMessageGoQuestAck = 353 // confirm quest destination/busyness (done) objSubTypeMessageGRolesReq = 354 // /g_roles (done) objSubTypeMessageGRolesAck = 355 // result from /g_roles (done) - objSubTypeMessageGStockResReq = 356 // /g_stock_res (not done) - objSubTypeMessageGStockAlchReq = 357 // /g_stock_res (not done) - objSubTypeMessageGStockMiscReq = 358 // /g_stock_res (not done) - objSubTypeMessageGStockRecReq = 359 // /g_stock_res (not done) - objSubTypeMessageGStockPartReq = 360 // /g_stock_res (not done) - objSubTypeMessageGStockOthReq = 361 // /g_stock_res (not done) - objSubTypeMessageGStockAnyAck = 362 // result from any /g_stock_xxx (not done) - objSubTypeMessageGStockReq = 363 // /g_stock (not done) - objSubTypeMessageGStockAck = 364 // result from /g_stock (not done) + objSubTypeMessageGStockResReq = 356 // /g_stock_res (done) + objSubTypeMessageGStockAlchReq = 357 // /g_stock_alch (done) + objSubTypeMessageGStockMiscReq = 358 // /g_stock_misc (done) + objSubTypeMessageGStockRecReq = 359 // /g_stock_rec (done) + objSubTypeMessageGStockPartReq = 360 // /g_stock_parts (done) + objSubTypeMessageGStockOthReq = 361 // /g_stock_other (done) + objSubTypeMessageGStockAnyAck = 362 // result from any /g_stock_xxx (done) + objSubTypeMessageGStockReq = 363 // /g_stock (done) + objSubTypeMessageGStockAck = 364 // result from /g_stock (done) objSubTypeJobPillage = 601 objSubTypeJobTribute = 602 objSubTypeJobStatus = 603 @@ -312,6 +320,7 @@ const ( objSubTypeItemRecipe = 704 objSubTypeItemPart = 705 objSubTypeItemOther = 706 + objSubTypeItemUnique = 707 objSubTypeCastle = 801 objSubTypeFair = 901 objSubTypeUnion = 1001 diff --git a/obj.go b/obj.go index ce9a846..be32fa3 100644 --- a/obj.go +++ b/obj.go @@ -10,6 +10,7 @@ var ( cacheObjCastle *sync.Map cacheObjGuild *sync.Map cacheObjUser *sync.Map + cacheObjItem *sync.Map ) func getObjTypeId(objId int64) (int64, error) { @@ -438,3 +439,96 @@ func addObjXP(userID64 int64, expNow int64, expLvl int64, level int64, date time } return objId, nil } + +func addObjItem(name string, code string, itemTypeID64 int64, weight int) (int64, error) { + tx, err := db.Begin() + logOnError(err, "addObjItem : start transaction") + if err != nil { + return 0, err + } + + res, err := tx.Exec(`INSERT INTO obj (obj_type_id, obj_sub_type_id) + VALUES (` + strconv.Itoa(objTypeItem) + `,` + strconv.Itoa(itemTypeID64) + `);`) + logOnError(err, "addObjItem : exec insert obj") + if err != nil { + err2 := tx.Rollback() + logOnError(err2, "addObjItem : rollback insert obj") + return 0, err + } + + objId, err := res.LastInsertId() + if err != nil { + err2 := tx.Rollback() + logOnError(err2, "addObjItem : rollback get lastInsertId") + return 0, err + } + + stmt, err := tx.Prepare(`INSERT INTO obj_item (obj_id, intl_id, name, weight) + VALUES (?, ?, ?, ?);`) + logOnError(err, "addObjItem : prepare insert obj_item") + if err != nil { + err2 := tx.Rollback() + logOnError(err2, "addObjItem : rollback prepare insert obj_item") + return 0, err + } + defer stmt.Close() + + _, err = stmt.Exec(objId, code, name, weight) + logOnError(err, "addObjItem : exec insert obj_item") + if err != nil { + err2 := tx.Rollback() + logOnError(err2, "addObjItem : rollback exec insert obj_item") + return 0, err + } + + err = tx.Commit() + logOnError(err, "addObjItem : commit") + if err != nil { + return 0, err + } + return objId, nil +} + +func getObjItemID(s string) int64 { + if v, ok := cacheObjItem.Load(s); ok { + i := v.(ChatWarsUser) + return i.ObjID64 + } else { + s := fmt.Sprintf("Object unknown : %s\n", s) + clientSendCWMsg(cfg.Bot.Admin, s) + return 0 + } +} + +func loadObjItem() error { + var ( + id int64 + intl_id string + name string + weight int + ) + + cacheObjItem = new(sync.Map) + + items, err := db.Query(`SELECT oi.obj_id, oi.intl_id, oi.name, oi.weight FROM obj_item oi;`) + if err != nil { + return err + } + defer items.Close() + + for items.Next() { + err = items.Scan(&id, &intl_id, &name, &weight) + if err != nil { + return err + } + c := new(ChatWarsItem) + c.ObjID64 = id + c.Code = intl_id + c.Name = name + c.Weight = weight + cacheObjItem.Store(intl_id, *c) + cacheObjItem.Store(name, *c) + } + + return nil +} diff --git a/rules.go b/rules.go index c7472ad..d47ecbd 100644 --- a/rules.go +++ b/rules.go @@ -139,6 +139,21 @@ func resetMsgParsingRules() { ,(5000, ` + strconv.Itoa(objSubTypeMessageGoQuestAck) + `, "Go Quest Ack Devil's Valley", "^You went to the (?P[a-zA-Z ']+). Don't lose your soul. Back in (?P