/** * 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::addToMentalStateTowardClampBehavior(JNIEnv *env, jobject self, jlong mob, jlong target, jint mentalState, jfloat value, jint behavior) { 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; MentalStates::Value current = creature->getMentalStateToward(targetId, static_cast<MentalStates::Enumerator>(mentalState)); LOGC(ConfigServerGame::isAiLoggingEnabled(), "debug_ai", ("ScriptMethodsMentalStates::addToMentalStateTowardClampBehavior() %s->%s state(%s) value(%.0f+%.0f) behavior(%s)", creature->getNetworkId().getValueString().c_str(), targetId.getValueString().c_str(), CreatureObject::getMentalStateString(mentalState), current, value, CreatureObject::getBehaviorString(behavior))); creature->setMentalStateTowardClampBehavior(targetId, static_cast<MentalStates::Enumerator>(mentalState), static_cast<MentalStates::Value>(current + value), static_cast<Behaviors::Enumerator>(behavior)); return JNI_TRUE; } // JavaLibrary::addToMentalState
/** * Returns a creature's mental state. * * @param env Java environment * @param self class calling this function * @param mob id of creature to access * @param mental state mental state we are interested in * * @return the mental state value, or MENTAL_STATE_ERROR on error */ jfloat JNICALL ScriptMethodsMentalStatesNamespace::getMentalStateToward(JNIEnv *env, jobject self, jlong mob, jlong target, jint mentalState) { UNREF(self); if (target == 0 || mentalState < 0 || mentalState >= MentalStates::NumberOfMentalStates) return MENTAL_STATE_ERROR; CreatureObject * creature = 0; if (!JavaLibrary::getObject(mob, creature)) return MENTAL_STATE_ERROR; NetworkId targetId(target); if (!targetId) return MENTAL_STATE_ERROR; return creature->getMentalStateToward(targetId, static_cast<MentalStates::Enumerator>(mentalState)); } // JavaLibrary::getMentalState
/** * 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
/** * Returns all the mental states for a creature. * * @param env Java environment * @param self class calling this function * @param mob id of creature to access * * @return the mental states for the creature */ jobjectArray JNICALL ScriptMethodsMentalStatesNamespace::getMentalStatesToward(JNIEnv *env, jobject self, jlong mob, jlong target) { UNREF(self); if (target == 0) return 0; CreatureObject * creature = 0; if (!JavaLibrary::getObject(mob, creature)) return 0; NetworkId targetId(target); if (!targetId) return 0; // create the array of mental states LocalObjectArrayRefPtr attribs = createNewObjectArray( MentalStates::NumberOfMentalStates, JavaLibrary::getClsMentalState()); if (env->ExceptionCheck()) { env->ExceptionDescribe(); return 0; } // set the array elements for (int i = 0; i < MentalStates::NumberOfMentalStates; ++i) { LocalRefPtr mentalState = createNewObject(JavaLibrary::getClsMentalState(), JavaLibrary::getMidMentalState(), i, creature->getMentalStateToward(targetId, static_cast<MentalStates::Enumerator>(i))); if (env->ExceptionCheck()) { env->ExceptionDescribe(); return 0; } setObjectArrayElement(*attribs, i, *mentalState); } return attribs->getReturnValue(); } // JavaLibrary::getMentalStates
/** * 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