mirror of
https://bitbucket.org/theswgsource/src-1.2.git
synced 2026-08-01 02:15:54 -04:00
Added serverScript library
This commit is contained in:
@@ -0,0 +1,963 @@
|
||||
//-----------------------------------------------------------------------
|
||||
// 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 == "")
|
||||
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 == "")
|
||||
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 == "")
|
||||
return JNI_FALSE;
|
||||
std::string eventDest;
|
||||
JavaLibrary::convert(localEventDestType, eventDest);
|
||||
if(eventDest == "")
|
||||
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 == "")
|
||||
return JNI_FALSE;
|
||||
std::string eventDest;
|
||||
JavaLibrary::convert(localEventDestType, eventDest);
|
||||
if(eventDest == "")
|
||||
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 == "")
|
||||
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 == "")
|
||||
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 == "")
|
||||
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 == "")
|
||||
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 == "")
|
||||
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 == "")
|
||||
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 == "")
|
||||
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 == "")
|
||||
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 == "")
|
||||
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 == "")
|
||||
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 == "")
|
||||
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 == "")
|
||||
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 == "")
|
||||
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);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
Reference in New Issue
Block a user