mirror of
https://bitbucket.org/theswgsource/src-1.2.git
synced 2026-07-14 00:01:30 -04:00
239 lines
7.8 KiB
C++
239 lines
7.8 KiB
C++
// ScriptMethodsSystem.cpp - implements script methods that are stubs needing real implementation
|
|
//
|
|
// copyright 2002 Sony Online Entertainment
|
|
//
|
|
//========================================================================
|
|
|
|
#include "serverScript/FirstServerScript.h"
|
|
#include "serverScript/JavaLibrary.h"
|
|
|
|
#include "serverGame/BuildingObject.h"
|
|
#include "serverGame/Client.h"
|
|
#include "serverGame/ServerObject.h"
|
|
#include "sharedFoundation/ConfigFile.h"
|
|
#include "sharedNetworkMessages/ConsoleChannelMessages.h"
|
|
#include "sharedNetworkMessages/GenericValueTypeMessage.h"
|
|
#include "sharedNetworkMessages/PlayCutSceneMessage.h"
|
|
|
|
|
|
// ======================================================================
|
|
// ScriptMethodsSystemNamespace
|
|
// ======================================================================
|
|
|
|
namespace ScriptMethodsSystemNamespace
|
|
{
|
|
bool install();
|
|
|
|
jboolean JNICALL sendConsoleCommand(JNIEnv * env, jobject self, jstring command, jlong target);
|
|
jstring JNICALL getConfigSetting(JNIEnv * env, jobject self, jstring section, jstring key);
|
|
jboolean JNICALL fixHouseItemLimit(JNIEnv * env, jobject self, jlong target);
|
|
void JNICALL saveTextOnClient(JNIEnv * env, jobject self, jlong jclient, jstring jfilename, jstring jfiletext);
|
|
void JNICALL saveBytesOnClient(JNIEnv * env, jobject self, jlong jclient, jstring jfilename, jbyteArray bytes);
|
|
void JNICALL launchClientWebBrowser(JNIEnv *env, jobject self, jlong player, jstring url);
|
|
void JNICALL playCutScene(JNIEnv * env, jobject self, jlong jclient, jstring jfilename);
|
|
}
|
|
|
|
|
|
//========================================================================
|
|
// install
|
|
//========================================================================
|
|
|
|
bool ScriptMethodsSystemNamespace::install()
|
|
{
|
|
const JNINativeMethod NATIVES[] = {
|
|
#define JF(a,b,c) {a,b,(void*)(ScriptMethodsSystemNamespace::c)}
|
|
JF("_sendConsoleCommand", "(Ljava/lang/String;J)Z", sendConsoleCommand),
|
|
JF("getConfigSetting", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", getConfigSetting),
|
|
JF("_fixHouseItemLimit", "(J)Z", fixHouseItemLimit),
|
|
JF("_saveTextOnClient", "(JLjava/lang/String;Ljava/lang/String;)V", saveTextOnClient),
|
|
JF("_saveBytesOnClient", "(JLjava/lang/String;[B)V", saveBytesOnClient),
|
|
JF("_launchClientWebBrowser", "(JLjava/lang/String;)V", launchClientWebBrowser),
|
|
JF("_playCutScene", "(JLjava/lang/String;)V", playCutScene),
|
|
};
|
|
|
|
return JavaLibrary::registerNatives(NATIVES, sizeof(NATIVES)/sizeof(NATIVES[0]));
|
|
}
|
|
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsSystemNamespace::sendConsoleCommand(JNIEnv * env, jobject self, jstring command, jlong target)
|
|
{
|
|
JavaStringParam localCommand(command);
|
|
|
|
ServerObject* object = NULL;
|
|
if (!JavaLibrary::getObject(target, object))
|
|
return JNI_FALSE;
|
|
|
|
Client* client = object->getClient();
|
|
if (!client)
|
|
return JNI_FALSE;
|
|
|
|
std::string commandName;
|
|
JavaLibrary::convert(localCommand, commandName);
|
|
|
|
ExecuteConsoleCommand msg(commandName);
|
|
client->send(msg,true);
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
// ----------------------------------------------------------------------
|
|
/**
|
|
* Returns the value of a config file key.
|
|
*
|
|
* @param env Java environment
|
|
* @param self class calling this function
|
|
* @param section the config file section
|
|
* @param key the config file key
|
|
*
|
|
* @return the key value, or null if the key doesn't exist
|
|
*/
|
|
jstring JNICALL ScriptMethodsSystemNamespace::getConfigSetting(JNIEnv * env, jobject self,
|
|
jstring section, jstring key)
|
|
{
|
|
UNREF(self);
|
|
|
|
if (section == 0 || key == 0)
|
|
return 0;
|
|
|
|
JavaStringParam jsection(section);
|
|
JavaStringParam jkey(key);
|
|
|
|
std::string sectionName;
|
|
if (!JavaLibrary::convert(jsection, sectionName))
|
|
return 0;
|
|
|
|
std::string keyName;
|
|
if (!JavaLibrary::convert(jkey, keyName))
|
|
return 0;
|
|
|
|
const ConfigFile::Section * sec = ConfigFile::getSection(sectionName.c_str());
|
|
if (sec == NULL)
|
|
return 0;
|
|
|
|
const ConfigFile::Key * ky = sec->findKey(keyName.c_str());
|
|
if (ky == NULL)
|
|
return NULL;
|
|
|
|
JavaString jvalue(ky->getAsString(ky->getCount()-1, ""));
|
|
return jvalue.getReturnValue();
|
|
} // JavaLibrary::getConfigSetting
|
|
|
|
// ----------------------------------------------------------------------
|
|
/**
|
|
* Utility function to fix a bug with houses.
|
|
*
|
|
* @param env Java environment
|
|
* @param self class calling this function
|
|
* @param target the house to fix
|
|
*
|
|
* @return true on success, false if target isn't a building
|
|
*/
|
|
jboolean JNICALL ScriptMethodsSystemNamespace::fixHouseItemLimit(JNIEnv * env, jobject self, jlong target)
|
|
{
|
|
UNREF(self);
|
|
|
|
TangibleObject *pob = 0;
|
|
if (!JavaLibrary::getObject(target, pob) || !pob->getPortalProperty())
|
|
return JNI_FALSE;
|
|
|
|
pob->fixUpPobItemLimit();
|
|
return JNI_TRUE;
|
|
} // JavaLibrary::fixHouseItemLimit
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
void JNICALL ScriptMethodsSystemNamespace::saveTextOnClient(JNIEnv *, jobject, jlong jclient, jstring jfilename, jstring jfiletext)
|
|
{
|
|
ServerObject *obj = 0;
|
|
if (JavaLibrary::getObject(jclient, obj))
|
|
{
|
|
Client * const client = obj->getClient();
|
|
if (client && client->isGod())
|
|
{
|
|
JavaStringParam filenameParam(jfilename);
|
|
JavaStringParam filetextParam(jfiletext);
|
|
std::string filename, filetext;
|
|
if (JavaLibrary::convert(filenameParam, filename) && JavaLibrary::convert(filetextParam, filetext))
|
|
{
|
|
GenericValueTypeMessage<std::pair<std::string, std::string> > const msg("SaveTextOnClient", std::make_pair(filename, filetext));
|
|
client->send(msg, true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
void JNICALL ScriptMethodsSystemNamespace::saveBytesOnClient(JNIEnv *, jobject, jlong jclient, jstring jfilename, jbyteArray bytes)
|
|
{
|
|
ServerObject *obj = 0;
|
|
if (JavaLibrary::getObject(jclient, obj))
|
|
{
|
|
Client * const client = obj->getClient();
|
|
if (client && client->isGod())
|
|
{
|
|
JavaStringParam filenameParam(jfilename);
|
|
std::string filename;
|
|
if (JavaLibrary::convert(filenameParam, filename))
|
|
{
|
|
if (bytes != 0)
|
|
{
|
|
std::vector<int8> bytesStr;
|
|
if (ScriptConversion::convert(bytes, bytesStr))
|
|
{
|
|
GenericValueTypeMessage<std::pair<std::string, std::string> > const msg("SaveTextOnClient", std::make_pair(filename, std::string(bytesStr.begin(), bytesStr.end())));
|
|
client->send(msg, true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
void JNICALL ScriptMethodsSystemNamespace::launchClientWebBrowser(JNIEnv *env, jobject self, jlong player, jstring url)
|
|
{
|
|
ServerObject const * obj = 0;
|
|
if (JavaLibrary::getObject(player, obj))
|
|
{
|
|
Client const * const client = obj->getClient();
|
|
if (client)
|
|
{
|
|
JavaStringParam urlParam(url);
|
|
std::string urlString;
|
|
if (JavaLibrary::convert(urlParam, urlString))
|
|
client->launchWebBrowser(urlString);
|
|
else
|
|
JAVA_THROW_SCRIPT_EXCEPTION(true, ("launchClientWebBrowser called with a url parameter that could not be converted to a string (network id was %s)",obj->getNetworkId().getValueString().c_str()));
|
|
}
|
|
}
|
|
else
|
|
JAVA_THROW_SCRIPT_EXCEPTION(true, ("launchClientWebBrowser was called with a network id paramter that could not be converted to an object."));
|
|
}
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
void JNICALL ScriptMethodsSystemNamespace::playCutScene(JNIEnv * env, jobject self, jlong jclient, jstring jfilename)
|
|
{
|
|
ServerObject *obj = 0;
|
|
if (JavaLibrary::getObject(jclient, obj))
|
|
{
|
|
Client * const client = obj->getClient();
|
|
if (client)
|
|
{
|
|
JavaStringParam filenameParam(jfilename);
|
|
std::string fileName;
|
|
if(JavaLibrary::convert(filenameParam, fileName))
|
|
{
|
|
PlayCutSceneMessage cutScene(fileName);
|
|
client->send(cutScene, true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// ======================================================================
|
|
|