std::string Player::getSaveText() const { std::ostringstream oss; std::string objectName = "thePlayer"; oss << "-- General status attributes" << std::endl; oss << "local " << objectName << " = DawnInterface.getPlayer();" << std::endl; oss << objectName << ":setStrength( " << getStrength() << " );" << std::endl; oss << objectName << ":setDexterity( " << getDexterity() << " );" << std::endl; oss << objectName << ":setVitality( " << getVitality() << " );" << std::endl; oss << objectName << ":setIntellect( " << getIntellect() << " );" << std::endl; oss << objectName << ":setWisdom( " << getWisdom() << " );" << std::endl; oss << objectName << ":setMaxHealth( " << getMaxHealth() << " );" << std::endl; oss << objectName << ":setMaxMana( " << getMaxMana() << " );" << std::endl; oss << objectName << ":setMaxFatigue( " << getMaxFatigue() << " );" << std::endl; oss << objectName << ":setMinDamage( " << getMinDamage() << " );" << std::endl; oss << objectName << ":setMaxDamage( " << getMaxDamage() << " );" << std::endl; // don't set activity textures here. That is determined by class of Player / NPC oss << objectName << ":setDamageModifierPoints( " << getDamageModifierPoints() << " );" << std::endl; oss << objectName << ":setHitModifierPoints( " << getHitModifierPoints() << " );" << std::endl; oss << objectName << ":setEvadeModifierPoints( " << getEvadeModifierPoints() << " );" << std::endl; oss << objectName << ":setParryModifierPoints( " << getParryModifierPoints() << " );" << std::endl; oss << objectName << ":setBlockModifierPoints( " << getBlockModifierPoints() << " );" << std::endl; oss << objectName << ":setMeleeCriticalModifierPoints( " << getMeleeCriticalModifierPoints() << " );" << std::endl; oss << objectName << ":setResistAllModifierPoints( " << getResistAllModifierPoints() << " );" << std::endl; oss << objectName << ":setSpellEffectAllModifierPoints( " << getSpellEffectAllModifierPoints() << " );" << std::endl; for( size_t curElement=0; curElement<static_cast<size_t>(ElementType::Count); ++curElement ) { ElementType::ElementType curElementType = static_cast<ElementType::ElementType>(curElement); oss << objectName << ":setResistElementModifierPoints( " << curElementType << ", " << getResistElementModifierPoints( curElementType ) << " );" << std::endl; oss << objectName << ":setSpellEffectElementModifierPoints( " << curElementType << ", " << getSpellEffectElementModifierPoints( curElementType ) << " );" << std::endl; } oss << objectName << ":setSpellCriticalModifierPoints( " << getSpellCriticalModifierPoints() << " );" << std::endl; oss << objectName << ":setName( \"" << getName() << "\" );" << std::endl; // string stream doesn't seem to have a proper overload for uint8_t and makes it the 0-character, so cast to size_t oss << objectName << ":setLevel( " << static_cast<size_t>(getLevel()) << " );" << std::endl; oss << objectName << ":setExperience( " << getExperience() << " );" << std::endl; oss << objectName << ":setClass( CharacterClass." << getClassName() << " );" << std::endl; oss << "-- coins" << std::endl; oss << objectName << ":setCoins( " << getCoins() << " );" << std::endl; oss << "-- position" << std::endl; oss << objectName << ":setPosition( " << getXPos() << ", " << getYPos() << " );" << std::endl; // no current attributes are set here because after reloading the player is completely refreshed again return oss.str(); }
void WeaponObjectImplementation::fillAttributeList(AttributeListMessage* alm, CreatureObject* object) { TangibleObjectImplementation::fillAttributeList(alm, object); bool res = isCertifiedFor(object); if (res) { alm->insertAttribute("weapon_cert_status", "Yes"); } else { alm->insertAttribute("weapon_cert_status", "No"); } /*if (usesRemaining > 0) alm->insertAttribute("count", usesRemaining);*/ for(int i = 0; i < wearableSkillMods.size(); ++i) { String key = wearableSkillMods.elementAt(i).getKey(); String statname = "cat_skill_mod_bonus.@stat_n:" + key; int value = wearableSkillMods.get(key); if (value > 0) alm->insertAttribute(statname, value); } String ap; switch (armorPiercing) { case NONE: ap = "None"; break; case LIGHT: ap = "Light"; break; case MEDIUM: ap = "Medium"; break; case HEAVY: ap = "Heavy"; break; default: ap = "Unknown"; break; } alm->insertAttribute("wpn_armor_pierce_rating", ap); alm->insertAttribute("wpn_attack_speed", Math::getPrecision(getAttackSpeed(), 1)); if (getDamageRadius() != 0.0f) alm->insertAttribute("area", Math::getPrecision(getDamageRadius(), 0)); //Damage Information StringBuffer dmgtxt; switch (damageType) { case KINETIC: dmgtxt << "Kinetic"; break; case ENERGY: dmgtxt << "Energy"; break; case ELECTRICITY: dmgtxt << "Electricity"; break; case STUN: dmgtxt << "Stun"; break; case BLAST: dmgtxt << "Blast"; break; case HEAT: dmgtxt << "Heat"; break; case COLD: dmgtxt << "Cold"; break; case ACID: dmgtxt << "Acid"; break; case LIGHTSABER: dmgtxt << "Lightsaber"; break; default: dmgtxt << "Unknown"; break; } alm->insertAttribute("damage.wpn_damage_type", dmgtxt); float minDmg = round(getMinDamage()); float maxDmg = round(getMaxDamage()); alm->insertAttribute("damage.wpn_damage_min", minDmg); alm->insertAttribute("damage.wpn_damage_max", maxDmg); StringBuffer woundsratio; float wnd = round(10 * getWoundsRatio()) / 10.0f; woundsratio << wnd << "%"; alm->insertAttribute("damage.wpn_wound_chance", woundsratio); //Accuracy Modifiers StringBuffer pblank; if (getPointBlankAccuracy() >= 0) pblank << "+"; pblank << getPointBlankAccuracy() << " @ " << getPointBlankRange() << "m"; alm->insertAttribute("cat_wpn_rangemods.wpn_range_zero", pblank); StringBuffer ideal; if (getIdealAccuracy() >= 0) ideal << "+"; ideal << getIdealAccuracy() << " @ " << getIdealRange() << "m"; alm->insertAttribute("cat_wpn_rangemods.wpn_range_mid", ideal); StringBuffer maxrange; if (getMaxRangeAccuracy() >= 0) maxrange << "+"; maxrange << getMaxRangeAccuracy() << " @ " << getMaxRange() << "m"; alm->insertAttribute("cat_wpn_rangemods.wpn_range_max", maxrange); //Special Attack Costs alm->insertAttribute("cat_wpn_attack_cost.health", getHealthAttackCost()); alm->insertAttribute("cat_wpn_attack_cost.action", getActionAttackCost()); alm->insertAttribute("cat_wpn_attack_cost.mind", getMindAttackCost()); //Anti Decay Kit if(hasAntiDecayKit()){ alm->insertAttribute("@veteran_new:antidecay_examine_title", "@veteran_new:antidecay_examine_text"); } // Force Cost if (getForceCost() > 0) alm->insertAttribute("forcecost", (int)getForceCost()); for (int i = 0; i < getNumberOfDots(); i++) { String dt; switch (getDotType(i)) { case 1: dt = "Poison"; break; case 2: dt = "Disease"; break; case 3: dt = "Fire"; break; case 4: dt = "Bleeding"; break; default: dt = "Unknown"; break; } StringBuffer type; type << "cat_wpn_dot_0" << i << ".wpn_dot_type"; alm->insertAttribute(type.toString(), dt); String da; switch (getDotAttribute(i)) { case 0: da = "Health"; break; case 1: da = "Strength"; break; case 2: da = "Constitution"; break; case 3: da = "Action"; break; case 4: da = "Quickness"; break; case 5: da = "Stamina"; break; case 6: da = "Mind"; break; case 7: da = "Focus"; break; case 8: da = "Willpower"; break; default: da = "Unknown"; break; } StringBuffer attrib; attrib << "cat_wpn_dot_0" << i << ".wpn_dot_attrib"; alm->insertAttribute(attrib.toString(), da); StringBuffer str; str << "cat_wpn_dot_0" << i << ".wpn_dot_strength"; alm->insertAttribute(str.toString(), getDotStrength(i)); StringBuffer dotDur; dotDur << getDotDuration(i) << "s"; StringBuffer dur; dur << "cat_wpn_dot_0" << i << ".wpn_dot_duration"; alm->insertAttribute(dur.toString(), dotDur); StringBuffer dotPot; dotPot << getDotPotency(i) << "%"; StringBuffer pot; pot << "cat_wpn_dot_0" << i << ".wpn_dot_potency"; alm->insertAttribute(pot.toString(), dotPot); StringBuffer use; use << "cat_wpn_dot_0" << i << ".wpn_dot_uses"; alm->insertAttribute(use.toString(), getDotUses(i)); } if(hasPowerup()) powerupObject->fillWeaponAttributeList(alm, _this.getReferenceUnsafeStaticCast()); if (sliced == 1) alm->insertAttribute("wpn_attr", "@obj_attr_n:hacked1"); }
void WeaponObjectImplementation::fillAttributeList(AttributeListMessage* alm, CreatureObject* object) { TangibleObjectImplementation::fillAttributeList(alm, object); for(int i = 0; i < wearableSkillMods.size(); ++i) { String key = wearableSkillMods.elementAt(i).getKey(); String statname = "cat_skill_mod_bonus.@stat_n:" + key; int value = wearableSkillMods.get(key); if (value > 0) alm->insertAttribute(statname, value); } // Dreadlow - ADK Notice goes here // - "Bio Link:" for some weapons too, if I'm not mistaken // Force Cost if (getForceCost() > 0) alm->insertAttribute("forcecost", getForceCost()); //alm->insertAttribute("healing_combat_level_required", levelRequired); alm->insertAttribute("skillmodmin", "None"); // Pull this // Dreadlow - "Required Profession:" here //Damage Information StringBuffer dmgtxt; switch (damageType) { case KINETIC: dmgtxt << "Kinetic"; break; case ENERGY: dmgtxt << "Energy"; break; case ELECTRICITY: dmgtxt << "Electricity"; break; case STUN: dmgtxt << "Stun"; break; case BLAST: dmgtxt << "Blast"; break; case HEAT: dmgtxt << "Heat"; break; case COLD: dmgtxt << "Cold"; break; case ACID: dmgtxt << "Acid"; break; case LIGHTSABER: dmgtxt << "Lightsaber"; break; default: dmgtxt << "Unknown"; break; } alm->insertAttribute("cat_wpn_damage.wpn_damage_type", dmgtxt); alm->insertAttribute("cat_wpn_damage.wpn_attack_speed", getAttackSpeed(true)); //alm->insertAttribute("cat_wpn_damage.wpn_real_speed", getModifiedSpeed(object)); alm->insertAttribute("cat_wpn_damage.damage", String::valueOf(getMinDamage(true)) + " - " + String::valueOf(getMaxDamage(true))); //alm->insertAttribute("cat_wpn_damage.wpn_accuracy", getAccuracyBonus(object)); alm->insertAttribute("cat_wpn_damage.wpn_wound_chance", getWoundsRatio(true)); //alm->insertAttribute("cat_wpn_damage.wpn_base_dps", String::valueOf(getBaseDPS(object)) + " / sec"); // alm->insertAttribute("cat_wpn_damage.wpn_real_dps", String::valueOf(getModifiedDPS(object)) + " / sec"); alm->insertAttribute("cat_wpn_other.wpn_range", "0 - " + String::valueOf(getMaxRange(true)) + "m"); //alm->insertAttribute("cat_wpn_other.attackcost", getSpecialActionCost()); if (hasPowerup()) powerupObject->fillWeaponAttributeList(alm, _this.get()); if (sliced == 1) alm->insertAttribute("cat_wpn_other.wpn_attr", "@obj_attr_n:hacked1"); }