mirror of
https://bitbucket.org/theswgsource/src-1.2.git
synced 2026-07-31 01:15:48 -04:00
964 lines
34 KiB
C++
Executable File
964 lines
34 KiB
C++
Executable File
//-----------------------------------------------------------------------
|
|
// ScriptMethodsClientEffect.cpp
|
|
// Copyright 2002, Sony Online Entertainment Inc., all rights reserved.
|
|
//-----------------------------------------------------------------------
|
|
|
|
#include "serverScript/FirstServerScript.h"
|
|
#include "serverScript/JavaLibrary.h"
|
|
|
|
#include "serverGame/GameServer.h"
|
|
#include "serverGame/ServerObject.h"
|
|
#include "serverGame/TangibleObject.h"
|
|
#include "sharedObject/CellProperty.h"
|
|
#include "sharedMath/PackedArgb.h"
|
|
#include "sharedNetworkMessages/ClientEffectMessages.h"
|
|
#include "sharedNetworkMessages/MessageQueueGenericValueType.h"
|
|
#include "sharedNetworkMessages/PlayMusicMessage.h"
|
|
|
|
|
|
// ======================================================================
|
|
// ScriptMethodsClientEffectNamespace
|
|
// ======================================================================
|
|
|
|
namespace ScriptMethodsClientEffectNamespace
|
|
{
|
|
bool install();
|
|
|
|
jboolean JNICALL playClientEventObj(JNIEnv *env, jobject self, jlong client, jstring eventType, jlong obj, jstring hardpoint, jobject jTransform);
|
|
jboolean JNICALL playClientEventObjLimited(JNIEnv *env, jobject self, jlongArray clients, jstring eventType, jlong obj, jstring hardpoint, jobject jTransform);
|
|
jboolean JNICALL playClientEventLoc(JNIEnv *env, jobject self, jlong client, jstring eventSourceType, jstring eventDestType, jobject loc, jfloat terrainDelta);
|
|
jboolean JNICALL playClientEventLocLimited(JNIEnv *env, jobject self, jlongArray client, jstring eventSourceType, jstring eventDestType, jobject loc, jfloat terrainDelta);
|
|
jboolean JNICALL playUiEffect(JNIEnv *env, jobject self, jlong client, jstring uiEffectString);
|
|
jboolean JNICALL playClientEffectObj(JNIEnv *env, jobject self, jlong client, jstring effectName, jlong obj, jstring hardpoint, jobject jTransform, jstring labelName);
|
|
jboolean JNICALL playClientEffectObjLimited(JNIEnv *env, jobject self, jlongArray clients, jstring effectName, jlong obj, jstring hardpoint, jobject jTransform, jstring labelName);
|
|
jboolean JNICALL playClientEffectLoc(JNIEnv *env, jobject self, jlong client, jstring effectName, jobject loc, jfloat terrainDelta, jstring labelName);
|
|
jboolean JNICALL playClientEffectLocLimited(JNIEnv *env, jobject self, jlongArray clients, jstring effectName, jobject loc, jfloat terrainDelta, jstring labelName);
|
|
jboolean JNICALL stopClientEffectObjByLabel(JNIEnv *env, jobject self, jlong client, jlong objectEffectIsOn, jstring labelName, jboolean softTerminate);
|
|
jboolean JNICALL stopClientEffectObjByLabelLimited(JNIEnv *env, jobject self, jlongArray clients, jlong objectEffectIsOn, jstring labelName, jboolean softTerminate);
|
|
jboolean JNICALL play2dNonLoopingMusic(JNIEnv *env, jobject self, jlong client, jstring musicName);
|
|
jboolean JNICALL play2dNonLoopingSound(JNIEnv *env, jobject self, jlong client, jstring musicName);
|
|
jboolean JNICALL playMusicWithParms(JNIEnv *env, jobject self, jlong client, jlong source, jstring musicName, jint playtype, bool loop);
|
|
void JNICALL sendMusicFlourish(JNIEnv *env, jobject self, jlong performer, jint flourishIndex);
|
|
jboolean JNICALL createClientProjectile(JNIEnv *env, jobject self, jlong client, jstring weaponObjectTemplateName, jobject start, jobject end, jfloat speed, jfloat expiration, jboolean trail, jint r, jint g, jint b, jint a);
|
|
jboolean JNICALL createClientProjectileObjectToObject(JNIEnv *env, jobject self, jlong client, jstring weaponObjectTemplateName, jlong source, jstring sourceHardpoint, jlong target, jstring targetHardpoint, jfloat speed, jfloat expiration, jboolean trail, jint r, jint g, jint b, jint a);
|
|
jboolean JNICALL createClientProjectileLocationToObject(JNIEnv *env, jobject self, jlong client, jstring weaponObjectTemplateName, jobject source, jlong target, jstring targetHardpoint, jfloat speed, jfloat expiration, jboolean trail, jint r, jint g, jint b, jint a);
|
|
jboolean JNICALL createClientProjectileObjectToLocation(JNIEnv *env, jobject self, jlong client, jstring weaponObjectTemplateName, jlong source, jstring sourceHardpoint, jobject target, jfloat speed, jfloat expiration, jboolean trail, jint r, jint g, jint b, jint a);
|
|
void JNICALL addObjectEffect(JNIEnv * env, jobject self, jlong obj, jstring filename, jstring hardpoint, jobject offset, jfloat scale, jstring label);
|
|
void JNICALL removeObjectEffect(JNIEnv * env, jobject self, jlong obj, jstring label);
|
|
void JNICALL removeAllObjectEffects(JNIEnv * env, jobject self, jlong obj);
|
|
jboolean JNICALL hasObjectEffect(JNIEnv * env, jobject self, jlong obj, jstring label);
|
|
}
|
|
|
|
//========================================================================
|
|
// install
|
|
//========================================================================
|
|
|
|
bool ScriptMethodsClientEffectNamespace::install()
|
|
{
|
|
const JNINativeMethod NATIVES[] = {
|
|
#define JF(a,b,c) {a,b,(void*)(ScriptMethodsClientEffectNamespace::c)}
|
|
JF("_playClientEventObj", "(JLjava/lang/String;JLjava/lang/String;Lscript/transform;)Z", playClientEventObj),
|
|
JF("_playClientEventObj", "([JLjava/lang/String;JLjava/lang/String;Lscript/transform;)Z", playClientEventObjLimited),
|
|
JF("_playClientEventLoc", "(JLjava/lang/String;Ljava/lang/String;Lscript/location;F)Z", playClientEventLoc),
|
|
JF("_playClientEventLoc", "([JLjava/lang/String;Ljava/lang/String;Lscript/location;F)Z", playClientEventLocLimited),
|
|
JF("_playUiEffect", "(JLjava/lang/String;)Z", playUiEffect),
|
|
JF("_playClientEffectObj", "(JLjava/lang/String;JLjava/lang/String;Lscript/transform;Ljava/lang/String;)Z", playClientEffectObj),
|
|
JF("_playClientEffectObj", "([JLjava/lang/String;JLjava/lang/String;Lscript/transform;Ljava/lang/String;)Z", playClientEffectObjLimited),
|
|
JF("_playClientEffectLoc", "(JLjava/lang/String;Lscript/location;FLjava/lang/String;)Z", playClientEffectLoc),
|
|
JF("_playClientEffectLoc", "([JLjava/lang/String;Lscript/location;FLjava/lang/String;)Z", playClientEffectLocLimited),
|
|
JF("_stopClientEffectObjByLabel", "(JJLjava/lang/String;Z)Z", stopClientEffectObjByLabel),
|
|
JF("_stopClientEffectObjByLabel", "([JJLjava/lang/String;Z)Z", stopClientEffectObjByLabelLimited),
|
|
JF("_play2dNonLoopingMusic", "(JLjava/lang/String;)Z", play2dNonLoopingMusic),
|
|
JF("_play2dNonLoopingSound", "(JLjava/lang/String;)Z", play2dNonLoopingSound),
|
|
JF("_playMusic", "(JJLjava/lang/String;IZ)Z", playMusicWithParms),
|
|
JF("_createClientProjectile", "(JLjava/lang/String;Lscript/location;Lscript/location;FFZIIII)Z", createClientProjectile),
|
|
JF("_createClientProjectileObjectToObject", "(JLjava/lang/String;JLjava/lang/String;JLjava/lang/String;FFZIIII)Z", createClientProjectileObjectToObject),
|
|
JF("_createClientProjectileLocationToObject", "(JLjava/lang/String;Lscript/location;JLjava/lang/String;FFZIIII)Z", createClientProjectileLocationToObject),
|
|
JF("_createClientProjectileObjectToLocation", "(JLjava/lang/String;JLjava/lang/String;Lscript/location;FFZIIII)Z", createClientProjectileObjectToLocation),
|
|
JF("_addObjectEffect", "(JLjava/lang/String;Ljava/lang/String;Lscript/vector;FLjava/lang/String;)V", addObjectEffect),
|
|
JF("_removeObjectEffect", "(JLjava/lang/String;)V", removeObjectEffect),
|
|
JF("_removeAllObjectEffects", "(J)V", removeAllObjectEffects),
|
|
JF("_hasObjectEffect", "(JLjava/lang/String;)Z", hasObjectEffect),
|
|
};
|
|
|
|
return JavaLibrary::registerNatives(NATIVES, sizeof(NATIVES)/sizeof(NATIVES[0]));
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsClientEffectNamespace::playClientEventObj(JNIEnv *env, jobject self, jlong client, jstring eventType, jlong objectToPlayEventOn, jstring jHardpoint, jobject jTransform)
|
|
{
|
|
JavaStringParam localEventType(eventType);
|
|
|
|
ServerObject* so = NULL;
|
|
if(!JavaLibrary::getObject(client, so))
|
|
return JNI_FALSE;
|
|
Client* c = so->getClient();
|
|
if(!c)
|
|
return JNI_FALSE;
|
|
if (!objectToPlayEventOn)
|
|
return JNI_FALSE;
|
|
|
|
ServerObject* target = NULL;
|
|
if(!JavaLibrary::getObject(objectToPlayEventOn, target))
|
|
return JNI_FALSE;
|
|
if(!target)
|
|
return JNI_FALSE;
|
|
|
|
//get the event
|
|
std::string event;
|
|
JavaLibrary::convert(localEventType, event);
|
|
if (event.empty())
|
|
return JNI_FALSE;
|
|
|
|
//get the hardpoint
|
|
std::string hp;
|
|
if (NULL != jHardpoint)
|
|
{
|
|
JavaStringParam localHardpoint(jHardpoint);
|
|
JavaLibrary::convert(localHardpoint, hp);
|
|
}
|
|
|
|
//get the transform
|
|
Transform transform;
|
|
if (NULL != jTransform)
|
|
{
|
|
ScriptConversion::convert(jTransform, transform);
|
|
}
|
|
|
|
JAVA_THROW_SCRIPT_EXCEPTION(!hp.empty() && transform != Transform::identity, ("playClientEventObj received valid hardpoint AND valid transform."));
|
|
|
|
const NetworkId nid(objectToPlayEventOn);
|
|
|
|
if (hp.empty() && transform != Transform::identity)
|
|
{
|
|
PlayClientEventObjectTransformMessage const pceotm(nid, event, transform);
|
|
so->sendToClientsInUpdateRange(pceotm, true);
|
|
}
|
|
else
|
|
{
|
|
PlayClientEventObjectMessage const pceom(nid, event, hp);
|
|
so->sendToClientsInUpdateRange(pceom, true);
|
|
}
|
|
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsClientEffectNamespace::playClientEventObjLimited(JNIEnv *env, jobject self, jlongArray clients, jstring eventType, jlong objectToPlayEventOn, jstring jHardpoint, jobject jTransform)
|
|
{
|
|
JavaStringParam localEventType(eventType);
|
|
|
|
std::vector<NetworkId> clientIds;
|
|
if (!ScriptConversion::convert(clients, clientIds))
|
|
return JNI_FALSE;
|
|
|
|
if (!objectToPlayEventOn)
|
|
return JNI_FALSE;
|
|
|
|
ServerObject* target = NULL;
|
|
if(!JavaLibrary::getObject(objectToPlayEventOn, target))
|
|
return JNI_FALSE;
|
|
if(!target)
|
|
return JNI_FALSE;
|
|
|
|
//get the event
|
|
std::string event;
|
|
JavaLibrary::convert(localEventType, event);
|
|
if (event.empty())
|
|
return JNI_FALSE;
|
|
|
|
//get the hardpoint
|
|
std::string hp;
|
|
if (NULL != jHardpoint)
|
|
{
|
|
JavaStringParam localHardpoint(jHardpoint);
|
|
JavaLibrary::convert(localHardpoint, hp);
|
|
}
|
|
|
|
//get the transform
|
|
Transform transform;
|
|
if (NULL != jTransform)
|
|
{
|
|
ScriptConversion::convert(jTransform, transform);
|
|
}
|
|
|
|
JAVA_THROW_SCRIPT_EXCEPTION(!hp.empty() && transform != Transform::identity, ("playClientEventObj received valid hardpoint AND valid transform."));
|
|
|
|
const NetworkId nid(objectToPlayEventOn);
|
|
|
|
if (hp.empty() && transform != Transform::identity)
|
|
{
|
|
PlayClientEventObjectTransformMessage const pceotm(nid, event, transform);
|
|
ServerObject::sendToSpecifiedClients(pceotm, true, clientIds);
|
|
}
|
|
else
|
|
{
|
|
PlayClientEventObjectMessage const pceom(nid, event, hp);
|
|
ServerObject::sendToSpecifiedClients(pceom, true, clientIds);
|
|
}
|
|
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsClientEffectNamespace::playClientEventLoc(JNIEnv *env, jobject self, jlong client, jstring eventSourceType, jstring eventDestType, jobject loc, jfloat terrainDelta)
|
|
{
|
|
JavaStringParam localEventSourceType(eventSourceType);
|
|
JavaStringParam localEventDestType(eventDestType);
|
|
|
|
ServerObject* so = NULL;
|
|
if(!JavaLibrary::getObject(client, so))
|
|
return JNI_FALSE;
|
|
Client* c = so->getClient();
|
|
if(!c)
|
|
return JNI_FALSE;
|
|
//get the events
|
|
std::string eventSource;
|
|
JavaLibrary::convert(localEventSourceType, eventSource);
|
|
if(eventSource.empty())
|
|
return JNI_FALSE;
|
|
std::string eventDest;
|
|
JavaLibrary::convert(localEventDestType, eventDest);
|
|
if(eventDest.empty())
|
|
return JNI_FALSE;
|
|
|
|
//get the location
|
|
Vector locationVec;
|
|
std::string sceneId;
|
|
NetworkId cell;
|
|
if (!ScriptConversion::convert(loc, locationVec, sceneId, cell))
|
|
return JNI_FALSE;
|
|
|
|
PlayClientEventLocMessage const pcelm(eventSource, eventDest, locationVec, sceneId, cell, terrainDelta);
|
|
|
|
so->sendToClientsInUpdateRange(pcelm, true);
|
|
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsClientEffectNamespace::playClientEventLocLimited(JNIEnv *env, jobject self, jlongArray clients, jstring eventSourceType, jstring eventDestType, jobject loc, jfloat terrainDelta)
|
|
{
|
|
JavaStringParam localEventSourceType(eventSourceType);
|
|
JavaStringParam localEventDestType(eventDestType);
|
|
|
|
std::vector<NetworkId> clientIds;
|
|
if (!ScriptConversion::convert(clients, clientIds))
|
|
return JNI_FALSE;
|
|
|
|
//get the events
|
|
std::string eventSource;
|
|
JavaLibrary::convert(localEventSourceType, eventSource);
|
|
if(eventSource.empty())
|
|
return JNI_FALSE;
|
|
std::string eventDest;
|
|
JavaLibrary::convert(localEventDestType, eventDest);
|
|
if(eventDest.empty())
|
|
return JNI_FALSE;
|
|
|
|
//get the location
|
|
Vector locationVec;
|
|
std::string sceneId;
|
|
NetworkId cell;
|
|
if (!ScriptConversion::convert(loc, locationVec, sceneId, cell))
|
|
return JNI_FALSE;
|
|
|
|
PlayClientEventLocMessage const pcelm(eventSource, eventDest, locationVec, sceneId, cell, terrainDelta);
|
|
|
|
ServerObject::sendToSpecifiedClients(pcelm, true, clientIds);
|
|
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsClientEffectNamespace::playClientEffectObj(JNIEnv *env, jobject self, jlong client, jstring effectName, jlong objectToPlayEffectOn, jstring jHardpoint, jobject jTransform, jstring labelName)
|
|
{
|
|
JavaStringParam localEffectName(effectName);
|
|
|
|
ServerObject* so = NULL;
|
|
if(!JavaLibrary::getObject(objectToPlayEffectOn, so))
|
|
return JNI_FALSE;
|
|
/* TPERRY - This isn't used
|
|
@TODO: We should take the client parameter out of this function and only use objectToPlayEffectOn
|
|
Client* c = so->getClient();
|
|
if(!c)
|
|
return JNI_FALSE;
|
|
*/
|
|
if (!objectToPlayEffectOn)
|
|
return JNI_FALSE;
|
|
|
|
ServerObject* target = NULL;
|
|
if(!JavaLibrary::getObject(objectToPlayEffectOn, target))
|
|
return JNI_FALSE;
|
|
if(!target)
|
|
return JNI_FALSE;
|
|
|
|
//get the effect
|
|
std::string effect;
|
|
JavaLibrary::convert(localEffectName, effect);
|
|
if(effect.empty())
|
|
return JNI_FALSE;
|
|
|
|
//get the hardpoint
|
|
std::string hp;
|
|
if (NULL != jHardpoint)
|
|
{
|
|
JavaStringParam localHardpoint(jHardpoint);
|
|
JavaLibrary::convert(localHardpoint, hp);
|
|
}
|
|
|
|
//get the transform
|
|
Transform transform;
|
|
if (NULL != jTransform)
|
|
{
|
|
ScriptConversion::convert(jTransform, transform);
|
|
}
|
|
|
|
//get the optional labelName
|
|
std::string strLabelName;
|
|
if (NULL != labelName)
|
|
{
|
|
JavaStringParam localLabel(labelName);
|
|
JavaLibrary::convert(localLabel, strLabelName);
|
|
}
|
|
|
|
JAVA_THROW_SCRIPT_EXCEPTION(!hp.empty() && transform != Transform::identity, ("playClientEffectObj received valid hardpoint AND valid transform."));
|
|
|
|
|
|
const NetworkId nid(objectToPlayEffectOn);
|
|
|
|
if (hp.empty() && transform != Transform::identity)
|
|
{
|
|
PlayClientEffectObjectTransformMessage const pceotm(nid, effect, transform, strLabelName);
|
|
so->sendToClientsInUpdateRange(pceotm, true);
|
|
}
|
|
else
|
|
{
|
|
PlayClientEffectObjectMessage const pceom(nid, effect, hp, strLabelName);
|
|
so->sendToClientsInUpdateRange(pceom, true);
|
|
}
|
|
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsClientEffectNamespace::playClientEffectObjLimited(JNIEnv *env, jobject self, jlongArray clients, jstring effectName, jlong objectToPlayEffectOn, jstring jHardpoint, jobject jTransform, jstring labelName)
|
|
{
|
|
JavaStringParam localEffectName(effectName);
|
|
|
|
std::vector<NetworkId> clientIds;
|
|
if (!ScriptConversion::convert(clients, clientIds))
|
|
return JNI_FALSE;
|
|
|
|
if (!objectToPlayEffectOn)
|
|
return JNI_FALSE;
|
|
|
|
ServerObject* target = NULL;
|
|
if(!JavaLibrary::getObject(objectToPlayEffectOn, target))
|
|
return JNI_FALSE;
|
|
if(!target)
|
|
return JNI_FALSE;
|
|
|
|
//get the effect
|
|
std::string effect;
|
|
JavaLibrary::convert(localEffectName, effect);
|
|
if(effect.empty())
|
|
return JNI_FALSE;
|
|
|
|
//get the hardpoint
|
|
std::string hp;
|
|
if (NULL != jHardpoint)
|
|
{
|
|
JavaStringParam localHardpoint(jHardpoint);
|
|
JavaLibrary::convert(localHardpoint, hp);
|
|
}
|
|
|
|
//get the transform
|
|
Transform transform;
|
|
if (NULL != jTransform)
|
|
{
|
|
ScriptConversion::convert(jTransform, transform);
|
|
}
|
|
|
|
//get the optional labelName
|
|
std::string strLabelName;
|
|
if (NULL != labelName)
|
|
{
|
|
JavaStringParam localLabel(labelName);
|
|
JavaLibrary::convert(localLabel, strLabelName);
|
|
}
|
|
|
|
JAVA_THROW_SCRIPT_EXCEPTION(!hp.empty() && transform != Transform::identity, ("playClientEffectObj received valid hardpoint AND valid transform."));
|
|
|
|
const NetworkId nid(objectToPlayEffectOn);
|
|
|
|
if (hp.empty() && transform != Transform::identity)
|
|
{
|
|
PlayClientEffectObjectTransformMessage const pceotm(nid, effect, transform, strLabelName);
|
|
ServerObject::sendToSpecifiedClients(pceotm, true, clientIds);
|
|
}
|
|
else
|
|
{
|
|
PlayClientEffectObjectMessage const pceom(nid, effect, hp, strLabelName);
|
|
ServerObject::sendToSpecifiedClients(pceom, true, clientIds);
|
|
}
|
|
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsClientEffectNamespace::playClientEffectLoc(JNIEnv *env, jobject self, jlong client, jstring effectName, jobject loc, jfloat terrainDelta, jstring labelName)
|
|
{
|
|
JavaStringParam localEffectName(effectName);
|
|
|
|
ServerObject* so = NULL;
|
|
if(!JavaLibrary::getObject(client, so))
|
|
return JNI_FALSE;
|
|
|
|
/* TPERRY - This isn't used
|
|
@TODO: We should take the client parameter out of this function and only use objectToPlayEffectOn
|
|
Client* c = so->getClient();
|
|
if(!c)
|
|
return JNI_FALSE;
|
|
*/
|
|
//get the effect
|
|
std::string effect;
|
|
JavaLibrary::convert(localEffectName, effect);
|
|
if(effect.empty())
|
|
return JNI_FALSE;
|
|
|
|
//get the location
|
|
Vector locationVec;
|
|
std::string sceneId;
|
|
NetworkId cell;
|
|
if (!ScriptConversion::convert(loc, locationVec, sceneId, cell))
|
|
return JNI_FALSE;
|
|
|
|
//get the optional labelName
|
|
std::string strLabelName;
|
|
if (NULL != labelName)
|
|
{
|
|
JavaStringParam localLabel(labelName);
|
|
JavaLibrary::convert(localLabel, strLabelName);
|
|
}
|
|
|
|
PlayClientEffectLocMessage const pcelm(effect, locationVec, sceneId, cell, terrainDelta, strLabelName);
|
|
|
|
so->sendToClientsInUpdateRange(pcelm, true);
|
|
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsClientEffectNamespace::playClientEffectLocLimited(JNIEnv *env, jobject self, jlongArray clients, jstring effectName, jobject loc, jfloat terrainDelta, jstring labelName)
|
|
{
|
|
JavaStringParam localEffectName(effectName);
|
|
|
|
std::vector<NetworkId> clientIds;
|
|
if (!ScriptConversion::convert(clients, clientIds))
|
|
return JNI_FALSE;
|
|
|
|
//get the effect
|
|
std::string effect;
|
|
JavaLibrary::convert(localEffectName, effect);
|
|
if(effect.empty())
|
|
return JNI_FALSE;
|
|
|
|
//get the location
|
|
Vector locationVec;
|
|
std::string sceneId;
|
|
NetworkId cell;
|
|
if (!ScriptConversion::convert(loc, locationVec, sceneId, cell))
|
|
return JNI_FALSE;
|
|
|
|
//get the optional labelName
|
|
std::string strLabelName;
|
|
if (NULL != labelName)
|
|
{
|
|
JavaStringParam localLabel(labelName);
|
|
JavaLibrary::convert(localLabel, strLabelName);
|
|
}
|
|
|
|
PlayClientEffectLocMessage const pcelm(effect, locationVec, sceneId, cell, terrainDelta, strLabelName);
|
|
|
|
ServerObject::sendToSpecifiedClients(pcelm, true, clientIds);
|
|
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsClientEffectNamespace::playUiEffect(JNIEnv * /*env*/, jobject /*self*/, jlong client, jstring uiEffectString)
|
|
{
|
|
JavaStringParam localUiEffectString(uiEffectString);
|
|
|
|
ServerObject* so = NULL;
|
|
if(!JavaLibrary::getObject(client, so))
|
|
{
|
|
NetworkId const networkId(client);
|
|
JAVA_THROW_SCRIPT_EXCEPTION(true, ("playUiEffect - could not find player %s.", networkId.getValueString().c_str()));
|
|
return JNI_FALSE;
|
|
}
|
|
|
|
//get the event
|
|
std::string uiEffect;
|
|
JavaLibrary::convert(localUiEffectString, uiEffect);
|
|
if (uiEffect.empty())
|
|
{
|
|
JAVA_THROW_SCRIPT_EXCEPTION(true, ("playUiEffect - empty effect string for %s.", so->getDebugInformation().c_str()));
|
|
return JNI_FALSE;
|
|
}
|
|
|
|
//format the message.
|
|
MessageQueueGenericValueType<std::pair<NetworkId, std::string> > * const msg = new MessageQueueGenericValueType<std::pair<NetworkId, std::string> >(std::make_pair(so->getNetworkId(), uiEffect));
|
|
so->appendMessage(CM_uiPlayEffect, 0.0f, msg);
|
|
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsClientEffectNamespace::stopClientEffectObjByLabel(JNIEnv *env, jobject self, jlong client, jlong objectEffectIsOn, jstring labelName, jboolean softTerminate)
|
|
{
|
|
JavaStringParam localLabel(labelName);
|
|
|
|
ServerObject* so = NULL;
|
|
if(!JavaLibrary::getObject(objectEffectIsOn, so))
|
|
return JNI_FALSE;
|
|
|
|
/* TPERRY - This isn't used
|
|
@TODO: We should take the client parameter out of this function and only use objectToPlayEffectOn
|
|
Client* c = so->getClient();
|
|
if(!c)
|
|
return JNI_FALSE;
|
|
*/
|
|
|
|
if (!objectEffectIsOn)
|
|
return JNI_FALSE;
|
|
|
|
ServerObject* target = NULL;
|
|
if(!JavaLibrary::getObject(objectEffectIsOn, target))
|
|
return JNI_FALSE;
|
|
if(!target)
|
|
return JNI_FALSE;
|
|
|
|
//get the effect
|
|
std::string strLabelName;
|
|
JavaLibrary::convert(localLabel, strLabelName);
|
|
if(strLabelName.empty())
|
|
return JNI_FALSE;
|
|
|
|
const NetworkId nid(objectEffectIsOn);
|
|
|
|
StopClientEffectObjectByLabelMessage const pceotm(nid, strLabelName, softTerminate);
|
|
so->sendToClientsInUpdateRange(pceotm, true);
|
|
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsClientEffectNamespace::stopClientEffectObjByLabelLimited(JNIEnv *env, jobject self, jlongArray clients, jlong objectEffectIsOn, jstring labelName, jboolean softTerminate)
|
|
{
|
|
JavaStringParam localLabel(labelName);
|
|
|
|
std::vector<NetworkId> clientIds;
|
|
if (!ScriptConversion::convert(clients, clientIds))
|
|
return JNI_FALSE;
|
|
|
|
if (!objectEffectIsOn)
|
|
return JNI_FALSE;
|
|
|
|
ServerObject* target = NULL;
|
|
if(!JavaLibrary::getObject(objectEffectIsOn, target))
|
|
return JNI_FALSE;
|
|
if(!target)
|
|
return JNI_FALSE;
|
|
|
|
//get the effect
|
|
std::string strLabelName;
|
|
JavaLibrary::convert(localLabel, strLabelName);
|
|
if(strLabelName.empty())
|
|
return JNI_FALSE;
|
|
|
|
const NetworkId nid(objectEffectIsOn);
|
|
|
|
StopClientEffectObjectByLabelMessage const pceotm(nid, strLabelName, softTerminate);
|
|
ServerObject::sendToSpecifiedClients(pceotm, true, clientIds);
|
|
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsClientEffectNamespace::play2dNonLoopingMusic(JNIEnv *env, jobject self, jlong client, jstring musicName)
|
|
{
|
|
JavaStringParam localMusicName(musicName);
|
|
|
|
ServerObject* so = NULL;
|
|
if (!JavaLibrary::getObject(client, so))
|
|
return JNI_FALSE;
|
|
Client* c = so->getClient();
|
|
if (!c)
|
|
return JNI_FALSE;
|
|
|
|
std::string music;
|
|
JavaLibrary::convert(localMusicName, music);
|
|
if (music.empty())
|
|
return JNI_FALSE;
|
|
|
|
PlayMusicMessage const msg(music, NetworkId::cms_invalid, 0, false);
|
|
c->send(msg, true);
|
|
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsClientEffectNamespace::play2dNonLoopingSound(JNIEnv *env, jobject self, jlong client, jstring musicName)
|
|
{
|
|
JavaStringParam localMusicName(musicName);
|
|
|
|
ServerObject* so = NULL;
|
|
if (!JavaLibrary::getObject(client, so))
|
|
return JNI_FALSE;
|
|
Client* c = so->getClient();
|
|
if (!c)
|
|
return JNI_FALSE;
|
|
|
|
std::string music;
|
|
JavaLibrary::convert(localMusicName, music);
|
|
if (music.empty())
|
|
return JNI_FALSE;
|
|
|
|
PlayMusicMessage const msg(music, NetworkId::cms_invalid, 1, false);
|
|
c->send(msg, true);
|
|
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsClientEffectNamespace::playMusicWithParms(JNIEnv *env, jobject self, jlong client, jlong source, jstring musicName, jint playType, bool loop)
|
|
{
|
|
JavaStringParam localMusicName(musicName);
|
|
|
|
ServerObject* so = NULL;
|
|
if (!JavaLibrary::getObject(client, so))
|
|
return JNI_FALSE;
|
|
Client* c = so->getClient();
|
|
if (!c)
|
|
return JNI_FALSE;
|
|
|
|
std::string music;
|
|
JavaLibrary::convert(localMusicName, music);
|
|
if (music.empty())
|
|
return JNI_FALSE;
|
|
|
|
PlayMusicMessage const msg(music, NetworkId(source), playType, loop);
|
|
c->send(msg, true);
|
|
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsClientEffectNamespace::createClientProjectile(JNIEnv *env, jobject self, jlong client, jstring weaponObjectTemplateName, jobject start, jobject end, jfloat speed, jfloat expiration, jboolean trail, jint r, jint g, jint b, jint a)
|
|
{
|
|
JavaStringParam localWeaponObjectTemplateName(weaponObjectTemplateName);
|
|
|
|
ServerObject* so = NULL;
|
|
if (!JavaLibrary::getObject(client, so))
|
|
return JNI_FALSE;
|
|
|
|
// verify a client exists
|
|
Client * c = so->getClient();
|
|
if (!c)
|
|
return JNI_FALSE;
|
|
|
|
// get the weapon object template name string
|
|
std::string weaponObjectTemplateNameString;
|
|
JavaLibrary::convert(localWeaponObjectTemplateName, weaponObjectTemplateNameString);
|
|
if (weaponObjectTemplateNameString.empty())
|
|
return JNI_FALSE;
|
|
|
|
// get the start location
|
|
Vector startLocationVec;
|
|
std::string startSceneId;
|
|
NetworkId startCell;
|
|
if (!ScriptConversion::convert(start, startLocationVec, startSceneId, startCell))
|
|
return JNI_FALSE;
|
|
|
|
// get the end location
|
|
Vector endLocationVec;
|
|
std::string endSceneId;
|
|
NetworkId endCell;
|
|
if (!ScriptConversion::convert(end, endLocationVec, endSceneId, endCell))
|
|
return JNI_FALSE;
|
|
|
|
CreateClientProjectileMessage const ccpm(weaponObjectTemplateNameString, startLocationVec, startCell, endLocationVec,
|
|
speed, expiration, trail, PackedArgb(static_cast<uint8>(a), static_cast<uint8>(r), static_cast<uint8>(g), static_cast<uint8>(b)).getArgb());
|
|
|
|
so->sendToClientsInUpdateRange(ccpm, true);
|
|
|
|
return JNI_TRUE;
|
|
}
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsClientEffectNamespace::createClientProjectileObjectToObject(JNIEnv *env, jobject self, jlong client, jstring weaponObjectTemplateName, jlong source, jstring sourceHardpoint, jlong target, jstring targetHardpoint, jfloat speed, jfloat expiration, jboolean trail, jint r, jint g, jint b, jint a)
|
|
{
|
|
JavaStringParam localWeaponObjectTemplateName(weaponObjectTemplateName);
|
|
|
|
ServerObject* so = NULL;
|
|
if (!JavaLibrary::getObject(client, so))
|
|
return JNI_FALSE;
|
|
|
|
// verify a client exists
|
|
Client * c = so->getClient();
|
|
if (!c)
|
|
return JNI_FALSE;
|
|
|
|
// get the weapon object template name string
|
|
std::string weaponObjectTemplateNameString;
|
|
JavaLibrary::convert(localWeaponObjectTemplateName, weaponObjectTemplateNameString);
|
|
if (weaponObjectTemplateNameString.empty())
|
|
return JNI_FALSE;
|
|
|
|
// Get our source object
|
|
ServerObject* sourceObject = NULL;
|
|
if (!JavaLibrary::getObject(source, sourceObject))
|
|
return JNI_FALSE;
|
|
|
|
NetworkId sourceId = sourceObject->getNetworkId();
|
|
|
|
// The target of our effect
|
|
ServerObject* targetObject = NULL;
|
|
if (!JavaLibrary::getObject(target, targetObject))
|
|
return JNI_FALSE;
|
|
|
|
NetworkId targetId = targetObject->getNetworkId();
|
|
|
|
// Optional Source hardpoint
|
|
JavaStringParam localSourceHardpointName(sourceHardpoint);
|
|
std::string sourceHardpointString;
|
|
JavaLibrary::convert(localSourceHardpointName, sourceHardpointString);
|
|
|
|
// Optional Target hardpoint
|
|
JavaStringParam localTargetHardpointName(targetHardpoint);
|
|
std::string targetHardpointString;
|
|
JavaLibrary::convert(localTargetHardpointName, targetHardpointString);
|
|
|
|
// Source's Cell ID
|
|
CellProperty const * const cellProperty = sourceObject->getParentCell();
|
|
Object const * const cellObject = (cellProperty != NULL) ? &cellProperty->getOwner() : NULL;
|
|
NetworkId const & networkIdForCellOrWorld = (cellObject != NULL) ? cellObject->getNetworkId() : NetworkId::cms_invalid;
|
|
|
|
CreateClientProjectileObjectToObjectMessage const ccpmoto(weaponObjectTemplateNameString, sourceId, sourceHardpointString, networkIdForCellOrWorld, targetId, targetHardpointString,
|
|
speed, expiration, trail, PackedArgb(static_cast<uint8>(a), static_cast<uint8>(r), static_cast<uint8>(g), static_cast<uint8>(b)).getArgb());
|
|
|
|
so->sendToClientsInUpdateRange(ccpmoto, true);
|
|
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsClientEffectNamespace::createClientProjectileObjectToLocation(JNIEnv *env, jobject self, jlong client, jstring weaponObjectTemplateName, jlong source, jstring sourceHardpoint, jobject target, jfloat speed, jfloat expiration, jboolean trail, jint r, jint g, jint b, jint a)
|
|
{
|
|
JavaStringParam localWeaponObjectTemplateName(weaponObjectTemplateName);
|
|
|
|
ServerObject* so = NULL;
|
|
if (!JavaLibrary::getObject(client, so))
|
|
return JNI_FALSE;
|
|
|
|
// verify a client exists
|
|
Client * c = so->getClient();
|
|
if (!c)
|
|
return JNI_FALSE;
|
|
|
|
// get the weapon object template name string
|
|
std::string weaponObjectTemplateNameString;
|
|
JavaLibrary::convert(localWeaponObjectTemplateName, weaponObjectTemplateNameString);
|
|
if (weaponObjectTemplateNameString.empty())
|
|
return JNI_FALSE;
|
|
|
|
// Get our source object
|
|
ServerObject* sourceObject = NULL;
|
|
if (!JavaLibrary::getObject(source, sourceObject))
|
|
return JNI_FALSE;
|
|
|
|
NetworkId sourceId = sourceObject->getNetworkId();
|
|
|
|
// Optional Source hardpoint
|
|
JavaStringParam localSourceHardpointName(sourceHardpoint);
|
|
std::string sourceHardpointString;
|
|
JavaLibrary::convert(localSourceHardpointName, sourceHardpointString);
|
|
|
|
// The target of our effect
|
|
Vector targetLocationVec;
|
|
std::string startSceneId;
|
|
NetworkId startCell;
|
|
if (!ScriptConversion::convert(target, targetLocationVec, startSceneId, startCell))
|
|
return JNI_FALSE;
|
|
|
|
// Source's Cell ID
|
|
CellProperty const * const cellProperty = sourceObject->getParentCell();
|
|
Object const * const cellObject = (cellProperty != NULL) ? &cellProperty->getOwner() : NULL;
|
|
NetworkId const & networkIdForCellOrWorld = (cellObject != NULL) ? cellObject->getNetworkId() : NetworkId::cms_invalid;
|
|
|
|
CreateClientProjectileObjectToLocationMessage const ccpmotl(weaponObjectTemplateNameString, sourceId, sourceHardpointString, networkIdForCellOrWorld, targetLocationVec,
|
|
speed, expiration, trail, PackedArgb(static_cast<uint8>(a), static_cast<uint8>(r), static_cast<uint8>(g), static_cast<uint8>(b)).getArgb());
|
|
|
|
so->sendToClientsInUpdateRange(ccpmotl, true);
|
|
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsClientEffectNamespace::createClientProjectileLocationToObject(JNIEnv *env, jobject self, jlong client, jstring weaponObjectTemplateName, jobject source, jlong target, jstring targetHardpoint, jfloat speed, jfloat expiration, jboolean trail, jint r, jint g, jint b, jint a)
|
|
{
|
|
JavaStringParam localWeaponObjectTemplateName(weaponObjectTemplateName);
|
|
|
|
ServerObject* so = NULL;
|
|
if (!JavaLibrary::getObject(client, so))
|
|
return JNI_FALSE;
|
|
|
|
// verify a client exists
|
|
Client * c = so->getClient();
|
|
if (!c)
|
|
return JNI_FALSE;
|
|
|
|
// get the weapon object template name string
|
|
std::string weaponObjectTemplateNameString;
|
|
JavaLibrary::convert(localWeaponObjectTemplateName, weaponObjectTemplateNameString);
|
|
if (weaponObjectTemplateNameString.empty())
|
|
return JNI_FALSE;
|
|
|
|
// Get our target object
|
|
ServerObject* targetObject = NULL;
|
|
if (!JavaLibrary::getObject(target, targetObject))
|
|
return JNI_FALSE;
|
|
|
|
NetworkId targetId = targetObject->getNetworkId();
|
|
|
|
|
|
// Optional Target hardpoint
|
|
JavaStringParam localTargetHardpointName(targetHardpoint);
|
|
std::string targetHardpointString;
|
|
JavaLibrary::convert(localTargetHardpointName, targetHardpointString);
|
|
|
|
Vector sourceLocationVec;
|
|
std::string startSceneId;
|
|
NetworkId startCell;
|
|
if (!ScriptConversion::convert(source, sourceLocationVec, startSceneId, startCell))
|
|
return JNI_FALSE;
|
|
|
|
// Target's Cell ID
|
|
CellProperty const * const cellProperty = targetObject->getParentCell();
|
|
Object const * const cellObject = (cellProperty != NULL) ? &cellProperty->getOwner() : NULL;
|
|
NetworkId const & networkIdForCellOrWorld = (cellObject != NULL) ? cellObject->getNetworkId() : NetworkId::cms_invalid;
|
|
|
|
CreateClientProjectileLocationToObjectMessage const ccpmlto(weaponObjectTemplateNameString, sourceLocationVec, networkIdForCellOrWorld, targetId, targetHardpointString,
|
|
speed, expiration, trail, PackedArgb(static_cast<uint8>(a), static_cast<uint8>(r), static_cast<uint8>(g), static_cast<uint8>(b)).getArgb());
|
|
|
|
so->sendToClientsInUpdateRange(ccpmlto, true);
|
|
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
void JNICALL ScriptMethodsClientEffectNamespace::addObjectEffect(JNIEnv * env, jobject self, jlong obj, jstring filename, jstring hardpoint, jobject offset, jfloat scale, jstring label)
|
|
{
|
|
ServerObject* so = NULL;
|
|
if (!JavaLibrary::getObject(obj, so))
|
|
return;
|
|
|
|
TangibleObject * tang = so->asTangibleObject();
|
|
if(!tang)
|
|
return;
|
|
|
|
JavaStringParam javaFilename(filename);
|
|
std::string localFilename;
|
|
JavaLibrary::convert(javaFilename, localFilename);
|
|
|
|
JavaStringParam javaLabel(label);
|
|
std::string localLabel;
|
|
JavaLibrary::convert(javaLabel, localLabel);
|
|
|
|
JavaStringParam javaHardpoint(hardpoint);
|
|
std::string localHardpoint;
|
|
JavaLibrary::convert(javaHardpoint, localHardpoint);
|
|
|
|
Vector offsetVector;
|
|
ScriptConversion::convert(offset, offsetVector);
|
|
|
|
if(localLabel.empty() || localFilename.empty())
|
|
return;
|
|
|
|
tang->addObjectEffect(localFilename, localHardpoint, offsetVector, scale, localLabel);
|
|
|
|
}
|
|
void JNICALL ScriptMethodsClientEffectNamespace::removeObjectEffect(JNIEnv * env, jobject self, jlong obj, jstring label)
|
|
{
|
|
ServerObject* so = NULL;
|
|
if (!JavaLibrary::getObject(obj, so))
|
|
return;
|
|
|
|
TangibleObject * tang = so->asTangibleObject();
|
|
if(!tang)
|
|
return;
|
|
|
|
JavaStringParam javaLabel(label);
|
|
std::string localLabel;
|
|
JavaLibrary::convert(javaLabel, localLabel);
|
|
|
|
if(localLabel.empty())
|
|
return;
|
|
|
|
tang->removeObjectEffect(localLabel);
|
|
}
|
|
|
|
void JNICALL ScriptMethodsClientEffectNamespace::removeAllObjectEffects(JNIEnv * env, jobject self, jlong obj)
|
|
{
|
|
ServerObject* so = NULL;
|
|
if (!JavaLibrary::getObject(obj, so))
|
|
return;
|
|
|
|
TangibleObject * tang = so->asTangibleObject();
|
|
if(!tang)
|
|
return;
|
|
|
|
tang->removeAllObjectEffects();
|
|
}
|
|
|
|
jboolean JNICALL ScriptMethodsClientEffectNamespace::hasObjectEffect(JNIEnv * env, jobject self, jlong obj, jstring label)
|
|
{
|
|
ServerObject* so = NULL;
|
|
if (!JavaLibrary::getObject(obj, so))
|
|
return JNI_FALSE;
|
|
|
|
TangibleObject * tang = so->asTangibleObject();
|
|
if(!tang)
|
|
return JNI_FALSE;
|
|
|
|
JavaStringParam javaLabel(label);
|
|
std::string localLabel;
|
|
JavaLibrary::convert(javaLabel, localLabel);
|
|
|
|
if(localLabel.empty())
|
|
return JNI_FALSE;
|
|
|
|
return tang->hasObjectEffect(localLabel);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|