internal static void PlayerFireProjectile(int index, int IsSkill = 0) { int ProjectileSlot = 0; int ProjectileNum = 0; int mapNum = 0; int i = 0; mapNum = S_Players.GetPlayerMap(index); // Find a free projectile for (i = 1; i <= MAX_PROJECTILES; i++) { if (MapProjectiles[mapNum, i].ProjectileNum == 0) { ProjectileSlot = i; break; } } // Check for no projectile, if so just overwrite the first slot if (ProjectileSlot == 0) { ProjectileSlot = 1; } // Check for skill, if so then load data acordingly if (IsSkill > 0) { ProjectileNum = Types.Skill[IsSkill].Projectile; } else { ProjectileNum = Types.Item[S_Players.GetPlayerEquipment(index, Enums.EquipmentType.Weapon)].Projectile; } if (ProjectileNum == 0) { return; } { MapProjectiles[mapNum, ProjectileSlot].ProjectileNum = ProjectileNum; MapProjectiles[mapNum, ProjectileSlot].Owner = index; MapProjectiles[mapNum, ProjectileSlot].OwnerType = (byte)Enums.TargetType.Player; MapProjectiles[mapNum, ProjectileSlot].Dir = (byte)S_Players.GetPlayerDir(index); MapProjectiles[mapNum, ProjectileSlot].X = S_Players.GetPlayerX(index); MapProjectiles[mapNum, ProjectileSlot].Y = S_Players.GetPlayerY(index); MapProjectiles[mapNum, ProjectileSlot].Timer = S_General.GetTimeMs() + 60000; } SendProjectileToMap(mapNum, ProjectileSlot); }