/** * Adds values to the mental states for a creature. * * @param env Java environment * @param self class calling this function * @param mob id of creature to access * @param values mental state/value pairs to add * * @return true on success, false on fail */ jboolean JNICALL ScriptMethodsMentalStatesNamespace::addToMentalStatesToward(JNIEnv *env, jobject self, jlong mob, jlong target, jobjectArray values) { UNREF(self); if (target == 0) return JNI_FALSE; CreatureObject * creature = 0; if (!JavaLibrary::getObject(mob, creature)) return JNI_FALSE; NetworkId targetId(target); if (!targetId) return JNI_FALSE; int count = env->GetArrayLength(values); for (int i = 0; i < count; ++i) { LocalRefPtr mentalState = getObjectArrayElement(LocalObjectArrayRefParam(values), i); if (mentalState == LocalRef::cms_nullPtr) return JNI_FALSE; int type = getIntField(*mentalState, JavaLibrary::getFidMentalStateType()); float delta = getFloatField(*mentalState, JavaLibrary::getFidMentalStateValue()); if (type < 0 || type >= MentalStates::NumberOfMentalStates) return JNI_FALSE; MentalStates::Value value = creature->getMentalStateToward(targetId, static_cast<MentalStates::Enumerator>(type)); creature->setMentalStateToward(targetId, static_cast<MentalStates::Enumerator>(type), static_cast<MentalStates::Value>(value+delta)); } return JNI_TRUE; } // JavaLibrary::addToMentalStates
/** * Adds a value to a creature's mental state. * * @param env Java environment * @param self class calling this function * @param mob id of creature to access * @param mentalState mental state we are interested in * @param value value to add to the mental state * * @return true on success, false on fail */ jboolean JNICALL ScriptMethodsMentalStatesNamespace::addToMentalStateToward(JNIEnv *env, jobject self, jlong mob, jlong target, jint mentalState, jfloat value) { UNREF(self); if (target == 0 || mentalState < 0 || mentalState >= MentalStates::NumberOfMentalStates) { LOGC(ConfigServerGame::isAiLoggingEnabled(), "debug_ai", ("ScriptMethodsMentalStates::addToMentalStateToward() error 1")); return JNI_FALSE; } CreatureObject * creature = 0; if (!JavaLibrary::getObject(mob, creature)) { LOGC(ConfigServerGame::isAiLoggingEnabled(), "debug_ai", ("ScriptMethodsMentalStates::addToMentalStateToward() error 2")); return JNI_FALSE; } NetworkId targetId(target); if (!targetId) { LOGC(ConfigServerGame::isAiLoggingEnabled(), "debug_ai", ("ScriptMethodsMentalStates::addToMentalStateToward() error 3")); return JNI_FALSE; } MentalStates::Value current = creature->getMentalStateToward(targetId, static_cast<MentalStates::Enumerator>(mentalState)); LOGC(ConfigServerGame::isAiLoggingEnabled(), "debug_ai", ("ScriptMethodsMentalStates::addToMentalStateToward() %s->%s state(%s) value(%.0f+%.0f)", creature->getNetworkId().getValueString().c_str(), targetId.getValueString().c_str(), CreatureObject::getMentalStateString(mentalState), current, value)); creature->setMentalStateToward(targetId, static_cast<MentalStates::Enumerator>(mentalState), static_cast<MentalStates::Value>(current + value)); return JNI_TRUE; } // JavaLibrary::addToMentalState
/** * Adds values to the mental states for a creature. * * @param env Java environment * @param self class calling this function * @param mob id of creature to access * @param values mental state/value pairs to add * * @return true on success, false on fail */ jboolean JNICALL ScriptMethodsMentalStatesNamespace::addToMentalStatesTowardArray(JNIEnv *env, jobject self, jlong mob, jlongArray target, jobjectArray values) { UNREF(self); CreatureObject * creature = 0; if (!JavaLibrary::getObject(mob, creature)) return JNI_FALSE; std::vector<NetworkId> targetIds; if (!ScriptConversion::convert(target, targetIds)) return JNI_FALSE; jboolean result = JNI_TRUE; std::vector<NetworkId>::iterator iTarget; int count = env->GetArrayLength(values); for (int i = 0; i < count; ++i) { LocalRefPtr mentalState = getObjectArrayElement(LocalObjectArrayRefParam(values), i); if (mentalState != LocalRef::cms_nullPtr) { int type = getIntField(*mentalState, JavaLibrary::getFidMentalStateType()); float delta = getFloatField(*mentalState, JavaLibrary::getFidMentalStateValue()); if (type >= 0 && type < MentalStates::NumberOfMentalStates) { for (iTarget=targetIds.begin(); iTarget!=targetIds.end(); ++iTarget) { MentalStates::Value value = creature->getMentalStateToward(*iTarget, static_cast<MentalStates::Enumerator>(type)); value += delta; creature->setMentalStateToward(*iTarget, static_cast<MentalStates::Enumerator>(type), static_cast<MentalStates::Value>(value)); } } else result = JNI_FALSE; } else result = JNI_FALSE; } return result; } // JavaLibrary::addToMentalStates
/** * Sets a creatue's mental state. * * @param env Java environment * @param self class calling this function * @param target id of creature to access * @param mentalState mental state we are interested in * @param value value to set the mental state to * * @return true on success, false on fail */ jboolean JNICALL ScriptMethodsMentalStatesNamespace::setMentalStateToward(JNIEnv *env, jobject self, jlong mob, jlong target, jint mentalState, jfloat value) { PROFILER_AUTO_BLOCK_DEFINE("setMentalStateToward"); UNREF(self); if (target == 0 || mentalState < 0 || mentalState >= MentalStates::NumberOfMentalStates) return JNI_FALSE; CreatureObject * creature = 0; if (!JavaLibrary::getObject(mob, creature)) return JNI_FALSE; NetworkId targetId(target); if (!targetId) return JNI_FALSE; creature->setMentalStateToward(targetId, static_cast<MentalStates::Enumerator>(mentalState), static_cast<MentalStates::Value>(value)); return JNI_TRUE; } // JavaLibrary::setAttrib
/** * Adds a value to a creature's mental state. * * @param env Java environment * @param self class calling this function * @param mob id of creature to access * @param mentalState mental state we are interested in * @param value value to add to the mental state * * @return true on success, false on fail */ jboolean JNICALL ScriptMethodsMentalStatesNamespace::addToMentalStateTowardArray(JNIEnv *env, jobject self, jlong mob, jlongArray target, jint mentalState, jfloat value) { UNREF(self); if (mentalState < 0 || mentalState >= MentalStates::NumberOfMentalStates) return JNI_FALSE; CreatureObject * creature = 0; if (!JavaLibrary::getObject(mob, creature)) return JNI_FALSE; std::vector<NetworkId> targetIds; if (!ScriptConversion::convert(target, targetIds)) return JNI_FALSE; std::vector<NetworkId>::iterator i; for (i=targetIds.begin(); i!=targetIds.end(); ++i) { MentalStates::Value current = creature->getMentalStateToward(*i, static_cast<MentalStates::Enumerator>(mentalState)); creature->setMentalStateToward(*i, static_cast<MentalStates::Enumerator>(mentalState), static_cast<MentalStates::Value>(current + value)); } return JNI_TRUE; } // JavaLibrary::addToMentalState