test craft all
This commit is contained in:
parent
87278e293d
commit
b70dff2700
118
job.go
118
job.go
@ -1935,12 +1935,16 @@ func jobCraftItem(j Job) {
|
|||||||
|
|
||||||
func jobCraftAll(j Job) {
|
func jobCraftAll(j Job) {
|
||||||
var (
|
var (
|
||||||
p JobPayloadCraftAll
|
p JobPayloadCraftAll
|
||||||
p2 JobPayloadGetVault
|
p2 JobPayloadGetVault
|
||||||
b []byte
|
b []byte
|
||||||
partsItems map[int64]string
|
itemParts map[int64]string
|
||||||
recipesItems map[int64]string
|
itemRecipes map[int64]string
|
||||||
ratioItems map[string]int64
|
ratioItems map[string]int64
|
||||||
|
totalParts map[string]int64
|
||||||
|
totalRecipes map[string]int64
|
||||||
|
completeItems map[string]float64
|
||||||
|
maxItems int64
|
||||||
)
|
)
|
||||||
|
|
||||||
err := setJobStart(j.ID64)
|
err := setJobStart(j.ID64)
|
||||||
@ -1977,9 +1981,12 @@ func jobCraftAll(j Job) {
|
|||||||
err = json.Unmarshal(b, &p2)
|
err = json.Unmarshal(b, &p2)
|
||||||
logOnError(err, "jobCraftAll : Unmarshal(p2)")
|
logOnError(err, "jobCraftAll : Unmarshal(p2)")
|
||||||
|
|
||||||
partsItems = make(map[string]int64)
|
itemParts = make(map[int64]string)
|
||||||
recipesItems = make(map[string]int64)
|
itemRecipes = make(map[int64]string)
|
||||||
ratioItems = make(map[string]int64)
|
ratioItems = make(map[string]int64)
|
||||||
|
totalParts = make(map[string]int64)
|
||||||
|
totalRecipes = make(map[string]int64)
|
||||||
|
completeItems = make(map[string]float64)
|
||||||
|
|
||||||
muxObjItem.RLock()
|
muxObjItem.RLock()
|
||||||
for _, o := range objItems {
|
for _, o := range objItems {
|
||||||
@ -1989,9 +1996,9 @@ func jobCraftAll(j Job) {
|
|||||||
p, _ := getObjItem(i.ItemID64)
|
p, _ := getObjItem(i.ItemID64)
|
||||||
if p.ItemTypeID == cacheObjSubType[`item_part`] {
|
if p.ItemTypeID == cacheObjSubType[`item_part`] {
|
||||||
ratioItems[o.Code] = i.Quantity
|
ratioItems[o.Code] = i.Quantity
|
||||||
partsItems[p.ObjID64] = o.Code
|
itemParts[p.ObjID64] = o.Code
|
||||||
} else if p.ItemTypeID == cacheObjSubType[`item_recipe`] {
|
} else if p.ItemTypeID == cacheObjSubType[`item_recipe`] {
|
||||||
recipesItems[p.ObjID64] = o.Code
|
itemRecipes[p.ObjID64] = o.Code
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2000,46 +2007,71 @@ func jobCraftAll(j Job) {
|
|||||||
muxObjItem.RUnlock()
|
muxObjItem.RUnlock()
|
||||||
|
|
||||||
for _, i := range p2.Vault {
|
for _, i := range p2.Vault {
|
||||||
|
if item, ok := itemsParts[i.ItemID64]; ok {
|
||||||
|
totalParts[item] = i.Quantity
|
||||||
|
} else if item, ok := itemsRecipes[i.ItemID64]; ok {
|
||||||
|
totalRecipes[item] = i.Quantity
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, i := range ratioItems {
|
||||||
|
recipes, _ := totalRecipes[k]
|
||||||
|
parts, _ := totalParts[k]
|
||||||
|
if (recipes > 0 && parts > (i-1)) || (parts >= i) {
|
||||||
|
completeItems[k] = MinInt64(recipes*i, parts) / i
|
||||||
|
maxItems = MaxInt64(maxItems, int64(completeItems[k]))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* we can finish the job */
|
/* we can finish the job */
|
||||||
/*
|
out := fmt.Sprintf("<code>Vault crafting summary\n")
|
||||||
out := fmt.Sprintf("<code>Summary for %d %s\n", p.Quantity, item.Names[0])
|
|
||||||
out = fmt.Sprintf("%s Mana : %d\n", out, totalMana)
|
|
||||||
out = fmt.Sprintf("%s Items :\n", out)
|
|
||||||
for k, v := range requiredItems {
|
|
||||||
obj, _ := getObjItem(getObjItemID(k, ``))
|
|
||||||
ava, _ := availableItems[k]
|
|
||||||
out = fmt.Sprintf("%s [%s] %s : %d (%d)\n", out, obj.Code, obj.Names[0], v, ava)
|
|
||||||
}
|
|
||||||
out = fmt.Sprintf("%s Missing :\n", out)
|
|
||||||
for k, v := range missingItems {
|
|
||||||
if v > 0 {
|
|
||||||
obj, _ := getObjItem(getObjItemID(k, ``))
|
|
||||||
out = fmt.Sprintf("%s [%s] %s : %d\n", out, obj.Code, obj.Names[0], v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
out = fmt.Sprintf("%s To craft :\n", out)
|
|
||||||
for k, v := range craftItems {
|
|
||||||
if v > 0 {
|
|
||||||
obj, _ := getObjItem(getObjItemID(k, ``))
|
|
||||||
out = fmt.Sprintf("%s [%s] %s : %d\n", out, obj.Code, obj.Names[0], v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
out = fmt.Sprintf("%s</code>", out)
|
|
||||||
|
|
||||||
c := TGCommand{
|
for maxItems > 0 {
|
||||||
Type: commandReplyMsg,
|
out = fmt.Sprintf("%s%d Items :\n", out, maxItems)
|
||||||
Text: out,
|
for k, v := range completeItems {
|
||||||
FromMsgID64: p.MsgID64,
|
if maxItems == int64(v) {
|
||||||
FromChatID64: p.ChatID64,
|
o, _ := getObjItem(getSilentObjItemID(k, ``))
|
||||||
ParseMode: cmdParseModeHTML,
|
out = fmt.Sprintf("%s %s - %s\n", out, k, o.Names[0])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
TGCmdQueue <- c
|
maxItems -= 1
|
||||||
*/
|
}
|
||||||
|
|
||||||
|
out = fmt.Sprintf("%s1 Part missing :\n", out)
|
||||||
|
for k, v := range completeItems {
|
||||||
|
if int64(v) == 0 {
|
||||||
|
parts, _ := totalParts[k]
|
||||||
|
if parts == ratioItems[k]-1 {
|
||||||
|
o, _ := getObjItem(getSilentObjItemID(k, ``))
|
||||||
|
out = fmt.Sprintf("%s %s - %s\n", out, k, o.Names[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
out = fmt.Sprintf("%sRecipe missing :\n", out)
|
||||||
|
for k, v := range completeItems {
|
||||||
|
if int64(v) == 0 {
|
||||||
|
recipe, _ := totalRecipes[k]
|
||||||
|
if recipe == 0 {
|
||||||
|
o, _ := getObjItem(getSilentObjItemID(k, ``))
|
||||||
|
out = fmt.Sprintf("%s %s - %s\n", out, k, o.Names[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
out = fmt.Sprintf("%s</code>", out)
|
||||||
|
|
||||||
|
c := TGCommand{
|
||||||
|
Type: commandReplyMsg,
|
||||||
|
Text: out,
|
||||||
|
FromMsgID64: p.MsgID64,
|
||||||
|
FromChatID64: p.ChatID64,
|
||||||
|
ParseMode: cmdParseModeHTML,
|
||||||
|
}
|
||||||
|
TGCmdQueue <- c
|
||||||
|
|
||||||
err = setJobDone(j.ID64)
|
err = setJobDone(j.ID64)
|
||||||
logOnError(err, "jobCraftItem : setJobDone")
|
logOnError(err, "jobCraftAll : setJobDone")
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
4
utils.go
4
utils.go
@ -22,7 +22,7 @@ func logOnError(err error, msg string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func MinInt(a int, b int) int {
|
func MinInt64(a int64, b int64) int64 {
|
||||||
if a < b {
|
if a < b {
|
||||||
return a
|
return a
|
||||||
} else {
|
} else {
|
||||||
@ -30,7 +30,7 @@ func MinInt(a int, b int) int {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func MaxInt(a int, b int) int {
|
func MaxInt(a int64, b int64) int64 {
|
||||||
if a > b {
|
if a > b {
|
||||||
return a
|
return a
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user