function CDOTABaseAbility:THTD_UpdateItemStarLevel()
	local tower = self:THTD_GetTower()
	if tower == nil then
		return 
	end
	
	local star = tower:THTD_GetStar()
	local level = tower:THTD_GetLevel()
	local item_level = (star-1) * 10 + level
	self:SetLevel(item_level)   -- 也可以用 self:GetSecondaryCharges()	
	-- star = math.floor((item_level-1)/10) + 1
	-- level = item_level - (star-1) * 10
end

function CDOTABaseAbility:THTD_GetTower()
	return self.tower or nil
end

function CDOTABaseAbility:THTD_RemoveItemInList(PlayerID)
	local list_num = PlayerID+1
	local itemName = self:GetAbilityName()

	if itemName~=nil then
		for k,v in pairs(towerPlayerList[list_num]) do
			if v["itemName"] == itemName then
				v["count"] = v["count"] - 1
				if v["count"] <= 0 then
					table.remove(towerPlayerList[list_num],k)				
				end
				SetNetTableTowerPlayerList(PlayerID)
				return
			end
		end
	end
end

function THTD_AddItemToListByName(PlayerID,itemNameRelease)
	local list_num = PlayerID+1
	local itemName = itemNameRelease

	if itemName~=nil then
		for k,v in pairs(towerPlayerList[list_num]) do
			if v["itemName"] == itemName then
				v["count"] = v["count"] + 1
				SetNetTableTowerPlayerList(PlayerID)
				return
			end
		end
		local itemTable = 
		{
			["itemName"] = itemName,
			["quality"]= towerNameList[itemName]["quality"],
			["count"]= 1,
		}
		table.insert(towerPlayerList[PlayerID+1],itemTable)
		SetNetTableTowerPlayerList(PlayerID)
	end
end

function CDOTABaseAbility:THTD_GetCardName()
	if towerNameList[self:GetAbilityName()] ~= nil then
		return towerNameList[self:GetAbilityName()]["cardname"]
	else
		return nil
	end
end

function CDOTABaseAbility:THTD_GetCardQuality()
	local unitName = self:GetAbilityName()
	if towerNameList[unitName] ~= nil then
		return towerNameList[unitName]["quality"]
	elseif unitName == "item_3150" or unitName == "item_3151" or unitName == "item_3152" then
		return 5
	else
		return nil
	end
end

function CDOTABaseAbility:THTD_IsCardHasPortrait()
	if towerNameList[self:GetAbilityName()] ~= nil then
		return towerNameList[self:GetAbilityName()]["hasPortrait"]
	else
		return nil
	end
end

function CDOTABaseAbility:THTD_GetPortraitPath(unitName)
	return "particles/portraits/"..unitName.."/thtd_"..unitName.."_portraits.vpcf"
end

function CDOTABaseAbility:THTD_IsCardHasVoice()
	if towerNameList[self:GetAbilityName()] ~= nil then
		return towerNameList[self:GetAbilityName()]["hasVoice"]
	else
		return nil
	end
end

function THTD_GetVoiceEvent(cardName,key)
	return "Voice_THTD."..cardName.."."..key
end

function THTD_GetItemCountByName(playerid,itemName)
	for k,v in pairs(towerPlayerList[playerid+1]) do
		if v["itemName"] == itemName then
			return v["count"]
		end
	end
	return 0
end

function ItemSetScale(item, scale)
	if item == nil then return end
	local box = item:GetContainer()
	if box == nil then return end
	box:SetModelScale(scale)
end

local thtd_item_scale = 
{
	["kokoro"] = 0.55,
	["yoshika"] = 0.55,	
	["aya"] = 0.55,	
	["cirno"] = 0.55,	
	["marisa"] = 0.55,	
	["reimu"] = 0.55,	
	["remilia"] = 0.65,
	["flandre"] = 0.65,	
	["yukari"] = 0.45,	
	["satori"] = 0.55,	
	["patchouli"] = 0.55,	
	["sakuya"] = 0.55,	
	["youmu"] = 0.55,	
	["tenshi"] = 0.55,	
	["yuuka"] = 0.55,	
	["clownpiece"] = 0.6,	
	["wriggle"] = 1.3,	
	["komachi"] = 0.55,	
	["shikieiki"] = 0.65,	
	["inaba"] = 0.65,	
	["shinki"] = 0.50,	
	["koishi"] = 0.55,				
}

function THTD_ItemSetScale(item)
	if item == nil then return end
	local cardName = item:THTD_GetCardName()	
	if cardName ~= nil then
		if thtd_item_scale[cardName] == nil then
			-- ItemSetScale(item, 1.0)
		else		
			ItemSetScale(item, thtd_item_scale[cardName])
		end
	end	
end

function THTD_HasItemScale(item)
	if item == nil then return false end
	local cardName = item:THTD_GetCardName()	
	if cardName ~= nil and thtd_item_scale[cardName] ~= nil then
		return true
	end
	return false
end
