private void ProcDigB45s(SkEntity caster) { SkInst inst = SkRuntimeInfo.Current as SkInst; IDigTerrain digTerrain = caster as IDigTerrain; IntVector4 digPos = null; if (null == digTerrain || (digPos = digTerrain.digPosType) == IntVector4.Zero || (inst != null && !(inst._target is Block45Man))) { return; } float damage = caster.GetAttribute((int)AttribType.Atk); float radius = caster.GetAttribute((int)AttribType.ResRange); float height = caster.GetAttribute((int)AttribType.ResRange); // float resourceBonus = caster.GetAttribute((int)AttribType.ResBouns); // bool returnResource = digPos.w == 1; PeEntity entity = caster != null?caster.GetComponent <PeEntity>() : null; if (entity != null && entity.monster != null) { radius = entity.bounds.extents.x + 1; height = entity.bounds.extents.y + 1; } if (null != inst && null != inst._colInfo) { int effecID = 0; if (radius < 3) { effecID = 258; } else if (radius < 5f) { effecID = 259; } else { effecID = 260; } Pathea.Effect.EffectBuilder.Instance.Register(effecID, null, inst._colInfo.hitPos, Quaternion.identity); } if (!GameConfig.IsMultiMode) { List <B45Block> removeList = new List <B45Block>(); DigTerrainManager.DigBlock45(digPos.ToIntVector3(), damage * 0.2f, radius, height, ref removeList, false); } else { /// TODO : code for multiplayer } }
private void ProcChangeTypes(SkEntity caster) { IDigTerrain digTerrain = caster as IDigTerrain; IntVector4 digPos = null; if (null == digTerrain || (digPos = digTerrain.digPosType) == IntVector4.Zero) { return; } float radius = 2; byte targetType = (byte)Mathf.RoundToInt(_attribs.sums[0]); IntVector3 intPos = digPos.XYZ; if (caster is Pathea.Projectile.SkProjectile) { SkEntity trueCaster = ((Pathea.Projectile.SkProjectile)caster).GetSkEntityCaster(); DigTerrainManager.ChangeTerrain(intPos, radius, targetType, trueCaster); } else { DigTerrainManager.ChangeTerrain(intPos, radius, targetType, caster); } }
private void ProcDigVoxels(SkEntity caster) { SkInst inst = SkRuntimeInfo.Current as SkInst; IDigTerrain digTerrain = caster as IDigTerrain; IntVector4 digPos = null; if (null == digTerrain || (digPos = digTerrain.digPosType) == IntVector4.Zero || (inst != null && !(inst._target is VFVoxelTerrain))) { return; } float damage = caster.GetAttribute((int)AttribType.Atk) * (1f + caster.GetAttribute((int)AttribType.ResDamage)); float radius = caster.GetAttribute((int)AttribType.ResRange); float resourceBonus = caster.GetAttribute((int)AttribType.ResBouns); float height = caster.GetAttribute((int)AttribType.ResDamage); bool returnResource = digPos.w == 1; IntVector3 intPos = digPos.XYZ; if (!GameConfig.IsMultiMode) { //VFVoxel getVoxel = VFVoxelTerrain.self.Voxels.SafeRead(intPos.x, intPos.y, intPos.z); List <VFVoxel> removeList = new List <VFVoxel>(); DigTerrainManager.DigTerrain(intPos, damage * (returnResource ? 5f : 1f), radius, height, ref removeList, returnResource); if (returnResource) { bool bGetSpItems = false; if (caster is SkAliveEntity) { SkAliveEntity alive = (SkAliveEntity)caster; SkillTreeUnitMgr mgr = alive.Entity.GetCmpt <SkillTreeUnitMgr>(); bGetSpItems = mgr.CheckMinerGetRare(); } Dictionary <int, int> itemGet = DigTerrainManager.GetResouce(removeList, resourceBonus, bGetSpItems); if (itemGet.Count > 0) { List <int> itemsArray = new List <int>(itemGet.Count * 2); foreach (int intemID in itemGet.Keys) { itemsArray.Add(intemID); itemsArray.Add(itemGet[intemID]); } caster.Pack += itemsArray.ToArray(); } } } else { if (caster != null && caster._net != null) { //VFVoxel getVoxel = VFVoxelTerrain.self.Voxels.SafeRead(intPos.x,intPos.y, intPos.z); bool bGetSpItems = false; if (returnResource) { if (caster is SkAliveEntity) { SkAliveEntity alive = (SkAliveEntity)caster; SkillTreeUnitMgr mgr = alive.Entity.GetCmpt <SkillTreeUnitMgr>(); bGetSpItems = mgr.CheckMinerGetRare(); } } DigTerrainManager.DigTerrainNetwork((SkNetworkInterface)(caster._net), intPos, damage * (returnResource ? 5f : 1f), radius, resourceBonus, returnResource, bGetSpItems, 0.3f); } } }