Award MaterialSaleObtainPossession items on material sell
Build and Push Docker images to Docker Hub / build-and-push (push) Has been cancelled

This commit is contained in:
Ilya Groshev
2026-05-14 11:56:40 +03:00
parent ae884b4060
commit dd00cadc18
2 changed files with 26 additions and 4 deletions
+13
View File
@@ -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
} }
+9
View File
@@ -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 {