mirror of
https://github.com/Walter-Sparrow/lunar-tear.git
synced 2026-07-02 05:43:41 +03:00
Award MaterialSaleObtainPossession items on material sell
Build and Push Docker images to Docker Hub / build-and-push (push) Has been cancelled
Build and Push Docker images to Docker Hub / build-and-push (push) Has been cancelled
This commit is contained in:
@@ -2,6 +2,7 @@ package masterdata
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
|
|
||||||
"lunar-tear/server/internal/model"
|
"lunar-tear/server/internal/model"
|
||||||
"lunar-tear/server/internal/utils"
|
"lunar-tear/server/internal/utils"
|
||||||
@@ -34,6 +35,7 @@ func BuildExpThresholds(paramMapRows []EntityMNumericalParameterMap, mapId int32
|
|||||||
type MaterialCatalog struct {
|
type MaterialCatalog struct {
|
||||||
All map[int32]EntityMMaterial
|
All map[int32]EntityMMaterial
|
||||||
ByType map[model.MaterialType]map[int32]EntityMMaterial
|
ByType map[model.MaterialType]map[int32]EntityMMaterial
|
||||||
|
SaleObtain map[int32][]EntityMMaterialSaleObtainPossession
|
||||||
}
|
}
|
||||||
|
|
||||||
func LoadMaterialCatalog() (*MaterialCatalog, error) {
|
func LoadMaterialCatalog() (*MaterialCatalog, error) {
|
||||||
@@ -45,6 +47,7 @@ func LoadMaterialCatalog() (*MaterialCatalog, error) {
|
|||||||
catalog := &MaterialCatalog{
|
catalog := &MaterialCatalog{
|
||||||
All: make(map[int32]EntityMMaterial, len(rows)),
|
All: make(map[int32]EntityMMaterial, len(rows)),
|
||||||
ByType: make(map[model.MaterialType]map[int32]EntityMMaterial),
|
ByType: make(map[model.MaterialType]map[int32]EntityMMaterial),
|
||||||
|
SaleObtain: make(map[int32][]EntityMMaterialSaleObtainPossession),
|
||||||
}
|
}
|
||||||
for _, row := range rows {
|
for _, row := range rows {
|
||||||
catalog.All[row.MaterialId] = row
|
catalog.All[row.MaterialId] = row
|
||||||
@@ -54,5 +57,15 @@ func LoadMaterialCatalog() (*MaterialCatalog, error) {
|
|||||||
}
|
}
|
||||||
catalog.ByType[mt][row.MaterialId] = row
|
catalog.ByType[mt][row.MaterialId] = row
|
||||||
}
|
}
|
||||||
|
|
||||||
|
saleRows, err := utils.ReadTable[EntityMMaterialSaleObtainPossession]("m_material_sale_obtain_possession")
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("material catalog: sale-obtain table unavailable, side rewards on sell will be skipped: %v", err)
|
||||||
|
} else {
|
||||||
|
for _, row := range saleRows {
|
||||||
|
catalog.SaleObtain[row.MaterialSaleObtainPossessionId] = append(catalog.SaleObtain[row.MaterialSaleObtainPossessionId], row)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return catalog, nil
|
return catalog, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
|
|
||||||
pb "lunar-tear/server/gen/proto"
|
pb "lunar-tear/server/gen/proto"
|
||||||
|
"lunar-tear/server/internal/model"
|
||||||
"lunar-tear/server/internal/runtime"
|
"lunar-tear/server/internal/runtime"
|
||||||
"lunar-tear/server/internal/store"
|
"lunar-tear/server/internal/store"
|
||||||
)
|
)
|
||||||
@@ -52,6 +53,14 @@ func (s *MaterialServiceServer) Sell(ctx context.Context, req *pb.MaterialSellRe
|
|||||||
gold := mat.SellPrice * item.Count
|
gold := mat.SellPrice * item.Count
|
||||||
totalGold += gold
|
totalGold += gold
|
||||||
log.Printf("[MaterialService] Sell: materialId=%d x%d -> %d gold", item.MaterialId, item.Count, gold)
|
log.Printf("[MaterialService] Sell: materialId=%d x%d -> %d gold", item.MaterialId, item.Count, gold)
|
||||||
|
|
||||||
|
if mat.MaterialSaleObtainPossessionId != 0 {
|
||||||
|
for _, row := range catalog.SaleObtain[mat.MaterialSaleObtainPossessionId] {
|
||||||
|
grantCount := row.Count * item.Count
|
||||||
|
store.GrantPossession(user, model.PossessionType(row.PossessionType), row.PossessionId, grantCount)
|
||||||
|
log.Printf("[MaterialService] Sell: materialId=%d x%d -> SaleObtain type=%d id=%d +%d", item.MaterialId, item.Count, row.PossessionType, row.PossessionId, grantCount)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if totalGold > 0 {
|
if totalGold > 0 {
|
||||||
|
|||||||
Reference in New Issue
Block a user