I am creating my own Building Skin Plugin but I have ran into issue I cannot resolve. For some reason I do not know, value "skinID" is not collected in OnStructureUpgrade but is collected OnHammerHit. I use the same collection method for both events. I have removed if not checks in here:
//Used by "/bskin" command
void SetPlayerSkin(PlayerSkinData playerData, string grade)
{
switch (grade)
{
case "stone":
playerData.Stone = 0;
break;
case "adobe":
playerData.Stone = 10220;
break;
case "brick":
playerData.Stone = 10223;
break;
case "metal":
playerData.Metal = 0;
break;
case "container":
playerData.Metal = 10221;
break;
}
}
private void OnHammerHit(BasePlayer player, HitInfo info)
{
var block = info.HitEntity as BuildingBlock;
var buildingGrade = block.grade.ToString();
PlayerSkinData playerData;
if (playerSkinChoices.TryGetValue(player.userID.ToString(), out playerData))
{
var skinID = GetPlayerSkinID(playerData, buildingGrade);
block.ClientRPC(null, "DoUpgradeEffect", (int)block.grade, skinID);
block.skinID = skinID;
block.ChangeGradeAndSkin(block.grade, skinID, true, true);
}
}
private void OnStructureUpgrade(BuildingBlock block, BasePlayer player, BuildingGrade.Enum grade)
{
var buildingGrade = block.grade.ToString();
PlayerSkinData playerData;
if (playerSkinChoices.TryGetValue(player.userID.ToString(), out playerData))
{
var skinID = GetPlayerSkinID(playerData, buildingGrade);
block.ClientRPC(null, "DoUpgradeEffect", (int)block.grade, skinID);
block.skinID = skinID;
NextTick(() => { block.ChangeGradeAndSkin(block.grade, skinID, true, true); });
}
}
private ulong GetPlayerSkinID(PlayerSkinData playerData, string grade)
{
switch (grade.ToLower())
{
case "stone":
return playerData.Stone;
case "metal":
return playerData.Metal;
default:
return 0;
}
}