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
+17 -4
View File
@@ -2,6 +2,7 @@ package masterdata
import (
"fmt"
"log"
"lunar-tear/server/internal/model"
"lunar-tear/server/internal/utils"
@@ -32,8 +33,9 @@ func BuildExpThresholds(paramMapRows []EntityMNumericalParameterMap, mapId int32
}
type MaterialCatalog struct {
All map[int32]EntityMMaterial
ByType map[model.MaterialType]map[int32]EntityMMaterial
All map[int32]EntityMMaterial
ByType map[model.MaterialType]map[int32]EntityMMaterial
SaleObtain map[int32][]EntityMMaterialSaleObtainPossession
}
func LoadMaterialCatalog() (*MaterialCatalog, error) {
@@ -43,8 +45,9 @@ func LoadMaterialCatalog() (*MaterialCatalog, error) {
}
catalog := &MaterialCatalog{
All: make(map[int32]EntityMMaterial, len(rows)),
ByType: make(map[model.MaterialType]map[int32]EntityMMaterial),
All: make(map[int32]EntityMMaterial, len(rows)),
ByType: make(map[model.MaterialType]map[int32]EntityMMaterial),
SaleObtain: make(map[int32][]EntityMMaterialSaleObtainPossession),
}
for _, row := range rows {
catalog.All[row.MaterialId] = row
@@ -54,5 +57,15 @@ func LoadMaterialCatalog() (*MaterialCatalog, error) {
}
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
}
+9
View File
@@ -6,6 +6,7 @@ import (
"log"
pb "lunar-tear/server/gen/proto"
"lunar-tear/server/internal/model"
"lunar-tear/server/internal/runtime"
"lunar-tear/server/internal/store"
)
@@ -52,6 +53,14 @@ func (s *MaterialServiceServer) Sell(ctx context.Context, req *pb.MaterialSellRe
gold := mat.SellPrice * item.Count
totalGold += 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 {