void TangibleObjectImplementation::sendPvpStatusTo(CreatureObject* player) { uint32 newPvpStatusBitmask = pvpStatusBitmask; if (!(newPvpStatusBitmask & CreatureFlag::ATTACKABLE)) { if (isAttackableBy(player)) newPvpStatusBitmask |= CreatureFlag::ATTACKABLE; } else if (!isAttackableBy(player)) newPvpStatusBitmask -= CreatureFlag::ATTACKABLE; if (!(newPvpStatusBitmask & CreatureFlag::AGGRESSIVE)) { if (isAggressiveTo(player)) newPvpStatusBitmask |= CreatureFlag::AGGRESSIVE; } else if (!isAggressiveTo(player)) newPvpStatusBitmask -= CreatureFlag::AGGRESSIVE; BaseMessage* pvp = new UpdatePVPStatusMessage(_this.get(), newPvpStatusBitmask); player->sendMessage(pvp); }
void CreatureImplementation::fillAttributeList(AttributeListMessage* alm, CreatureObject* player) { AiAgentImplementation::fillAttributeList(alm, player); int creaKnowledge = player->getSkillMod("creature_knowledge"); if (getHideType().isEmpty() && getBoneType().isEmpty() && getMeatType().isEmpty()) { if(!isPet()) // we do want to show this for pets return; } if (creaKnowledge >= 5) { if (isAggressiveTo(player)) alm->insertAttribute("aggro", "yes"); else alm->insertAttribute("aggro", "no"); if (isStalker()) alm->insertAttribute("stalking", "yes"); else alm->insertAttribute("stalking", "no"); } if (creaKnowledge >= 10) { if (getTame() > 0.0f) alm->insertAttribute("tamable", "yes"); else alm->insertAttribute("tamable", "no"); } if (creaKnowledge >= 20 && !isPet()) { if (!getHideType().isEmpty()) { StringBuffer hideName; hideName << "@obj_attr_n:" << getHideType(); alm->insertAttribute("res_hide", hideName.toString()); } else alm->insertAttribute("res_hide", "---"); if (!getBoneType().isEmpty()) { StringBuffer boneName; boneName << "@obj_attr_n:" << getBoneType(); alm->insertAttribute("res_bone", boneName.toString()); } else alm->insertAttribute("res_bone", "---"); if (!getMeatType().isEmpty()) { StringBuffer meatName; meatName << "@obj_attr_n:" << getMeatType(); alm->insertAttribute("res_meat", meatName.toString()); } else alm->insertAttribute("res_meat", "---"); } if (creaKnowledge >= 30) { if (isKiller()) alm->insertAttribute("killer", "yes"); else alm->insertAttribute("killer", "no"); } if (creaKnowledge >= 40) { alm->insertAttribute("ferocity", (int) getFerocity()); } if (creaKnowledge >= 50) alm->insertAttribute("challenge_level", getAdultLevel()); //int skillNum = skillCommands.size(); CreatureAttackMap* attackMap = getAttackMap(); int skillNum = 0; if (attackMap != NULL) skillNum = attackMap->size(); if (creaKnowledge >= 70) { String skillname = ""; if (skillNum >= 1) skillname = attackMap->getCommand(0); if (skillname == "creatureareaattack") skillname = "unknown_attack"; else if (skillname.isEmpty()) skillname = "none"; StringBuffer skillMsg; skillMsg << "@combat_effects:" << skillname; alm->insertAttribute("pet_command_18", skillMsg.toString()); } if (creaKnowledge >= 80) { String skillname = ""; if (skillNum >= 2) skillname = attackMap->getCommand(1); if (skillname == "creatureareaattack") skillname = "unknown_attack"; else if (skillname.isEmpty()) skillname = "none"; StringBuffer skillMsg; skillMsg << "@combat_effects:" << skillname; alm->insertAttribute("pet_command_19", skillMsg.toString()); } if (creaKnowledge >= 90) alm->insertAttribute("basetohit", getChanceHit()); if (creaKnowledge >= 100) { StringBuffer damageMsg; damageMsg << getDamageMin() << "-" << getDamageMax(); alm->insertAttribute("cat_wpn_damage", damageMsg.toString()); } }