private void handleHarvest(PlayerCharacter pc, IncommingMessage msg) { if (pc.LoginState == PlayerCharacterLoginState.LoginSuccesfull) { HarvestIncommingMessage msgHarvest = (HarvestIncommingMessage)msg; switch (pc.LocationCurrentMap.Name) { case ("calindor_startmap.elm"): { switch (msgHarvest.TargetObjectID) { case(138): case (139): { ActionDescriptor actDesc = new HarvestActionDescriptor(2000, 1000); actDesc.AddExperienceDescriptor(new ExperienceDescriptor(EntitySkillType.HarvestingPlants, 3, 15)); HarvestableResourceDescriptor rscDef = new HarvestableResourceDescriptor( ItemDefinitionCache.GetItemDefinitionByID(2), actDesc , 1); pc.HarvestStart(rscDef); break; } case (274): { ActionDescriptor actDesc = new HarvestActionDescriptor(3000, 1000); actDesc.AddExperienceDescriptor(new ExperienceDescriptor(EntitySkillType.HarvestingPlants, 10, 25)); HarvestableResourceDescriptor rscDef = new HarvestableResourceDescriptor( ItemDefinitionCache.GetItemDefinitionByID(3), actDesc, 1); pc.HarvestStart(rscDef); break; } case (194): { ActionDescriptor actDesc = new HarvestActionDescriptor(3000, 1000); actDesc.AddExperienceDescriptor(new ExperienceDescriptor(EntitySkillType.HarvestingPlants, 10, 25)); HarvestableResourceDescriptor rscDef = new HarvestableResourceDescriptor( ItemDefinitionCache.GetItemDefinitionByID(3), actDesc, 2); pc.HarvestStart(rscDef); break; } case (276): { ActionDescriptor actDesc = new HarvestActionDescriptor(3000, 1000); actDesc.AddExperienceDescriptor(new ExperienceDescriptor(EntitySkillType.HarvestingPlants, 8, 20)); HarvestableResourceDescriptor rscDef = new HarvestableResourceDescriptor( ItemDefinitionCache.GetItemDefinitionByID(7), actDesc, 1); pc.HarvestStart(rscDef); break; } } break; } } } }
public void HarvestStart(HarvestableResourceDescriptor rscDef) { HarvestTimeBasedAction harvest = new HarvestTimeBasedAction(this, rscDef); harvest.Activate(); RawTextOutgoingMessage msgRawText = (RawTextOutgoingMessage)OutgoingMessagesFactory.Create(OutgoingMessageType.RAW_TEXT); msgRawText.Channel = PredefinedChannel.CHAT_LOCAL; msgRawText.Color = PredefinedColor.Blue1; msgRawText.Text = "You started harvesting " + rscDef.HarvestedItem.Name; // Add success rate comment double successRate = HarvestGetSuccessRate(rscDef); if (successRate < 0.5) { if (successRate < 0.25) { msgRawText.Text += " and you feel you will need a lot of luck."; } else { msgRawText.Text += " and you feel you will need some luck."; } } else msgRawText.Text += " and you feel confident about it."; PutMessageIntoMyQueue(msgRawText); }
public void HarvestItemHarvested(HarvestableResourceDescriptor rscDef) { Item itm = new Item(rscDef.HarvestedItem); itm.Quantity = rscDef.QuantityPerHarvest; InventoryUpdateItem(itm); SkillsAwardExperience(rscDef.PerformedAction); }
public double HarvestGetSuccessRate(HarvestableResourceDescriptor rscDef) { double _return = 0.0; int skillsUsed = 0; double skillSuccessRate = 0.0; ActionDescriptor actDef = rscDef.PerformedAction; foreach (ExperienceDescriptor xpDesc in actDef.ExperienceDescriptors) { skillsUsed++; int levelDiff = skills.GetCurrentLevelDifference(xpDesc.Skill, xpDesc.BaseLevel); if (levelDiff < 0) skillSuccessRate = (10.0 + levelDiff) * 0.05; // Linear else skillSuccessRate = (20.0 + levelDiff) * 0.025; // Linear _return += skillSuccessRate; } _return /= skillsUsed; if (_return < 0.001) _return = 0.001; // Always a chance for lucky success 1/1000 if (_return > 0.995) _return = 0.995; // Always a chance for failure 5/1000 return _return; }
public uint HarvestGetActionTime(HarvestableResourceDescriptor rscDef) { ActionDescriptor actDef = rscDef.PerformedAction; int _return = 0; int skillsUsed = 0; int skillTime = 0; foreach (ExperienceDescriptor xpDesc in actDef.ExperienceDescriptors) { skillsUsed++; int levelDiff = skills.GetCurrentLevelDifference(xpDesc.Skill, xpDesc.BaseLevel); if (levelDiff < 0) skillTime = (int)((-levelDiff) * (actDef.BaseTime / 10)); // Linear else skillTime = (int)((-levelDiff) * (actDef.BaseTime / 20)); // Linear _return += (int)(actDef.BaseTime + skillTime); } _return /= skillsUsed; if (_return < actDef.MinTime) _return = (int)actDef.MinTime; // Can't work faster than min time if (_return < 0) return 0; else return (uint)_return; }