Added:
trunk/twxbbs/scripts/session/
trunk/twxbbs/scripts/session/login.js
trunk/twxbbs/scripts/session/stop-attacks.js (contents, props changed)
- copied, changed from r61, /trunk/twxbbs/scripts/test.js
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/DefaultScriptManager.java
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptManager.java
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptType.java
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptVariablesFactory.java
Removed:
trunk/twxbbs/scripts/test.js
Modified:
trunk/twxbbs/src/main/java/org/twdata/twxbbs/Container.java
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/DefaultProxyManager.java
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/JavascriptScript.java
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptApi.java
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptApiImpl.java
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptIoFilter.java
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptLexer.java
trunk/twxbbs/src/main/resources/org/twdata/twxbbs/proxy/script/global.js
Log:
Splitting out session and application scripts, beefed up attack prevention
script to be more realistic and fixed associated issues in lexing
Added: trunk/twxbbs/scripts/session/login.js
==============================================================================
--- (empty file)
+++ trunk/twxbbs/scripts/session/login.js Sat Aug 30 08:14:38 2008
@@ -0,0 +1,21 @@
+var attackPtn = / (.*)'s (.*) \(([0-9]+)-([0-9]+)\).*/;
+
+function login(prompt) {
+ game.send("don*");
+}
+function menu(prompt) {
+ game.send("a");
+}
+
+function gamePause(prompt) {
+ game.send(" ");
+ game.pause();
+}
+
+game.setTextTrigger("pause", "[Pause]", gamePause);
+game.setTextTrigger("login","ENTER", login);
+game.pause();
+game.setTextTrigger("menu", "menu):", menu);
+game.pause();
+
+println("Login done");
Copied: trunk/twxbbs/scripts/session/stop-attacks.js (from r61,
/trunk/twxbbs/scripts/test.js)
==============================================================================
--- /trunk/twxbbs/scripts/test.js (original)
+++ trunk/twxbbs/scripts/session/stop-attacks.js Sat Aug 30 08:14:38 2008
@@ -1,28 +1,26 @@
-function login(prompt) {
- game.send("don*");
-}
-function menu(prompt) {
- game.send("a");
-}
-function attack(prompt) {
- player.send("*\u001b[30mDon't be a dick*");
- game.setCapturingTextLineTrigger("no", "No",
function(txt){println("txt:"+txt);});
- game.send("n");
+var attackPtn = / (.*)'s (.*) \(([0-9]+)-([0-9]+)\).*/;
+
+function maybeAttack(prompt) {
+ game.setTextTrigger("maybeAttack", "[N]?", attack);
game.pause();
+ game.killTextTrigger("maybeAttack");
}
-function gamePause(prompt) {
- game.send(" ");
+function attack(prompt) {
+ match = prompt.match(attackPtn);
+ if (match != null) {
+ println("Try to attack "+match[1]+" with "+match[4]+"
using "+match[3]+" fighters");
+ player.send("*\u001b[30mDon't be a dick*");
+ game.setCapturingTextLineTrigger("no", "No",
function(txt){println("txt:"+txt);});
+ game.send("n");
+ game.pause();
+ } else {
+ println("Can't match :"+prompt+":");
+ }
+
game.pause();
}
-game.setTextTrigger("pause", "[Pause]", gamePause);
-game.setTextTrigger("login","ENTER", login);
-game.pause();
-game.setTextTrigger("menu", "menu):", menu);
-game.pause();
-game.setTextTrigger("attack", "<Attack>", attack);
-game.killTextTrigger("menu");
-game.killTextTrigger("login");
+game.setTextTrigger("attack", "Attack", maybeAttack);
game.pause();
-println("Script done");
+println("Attack script done");
Modified: trunk/twxbbs/src/main/java/org/twdata/twxbbs/Container.java
==============================================================================
--- trunk/twxbbs/src/main/java/org/twdata/twxbbs/Container.java (original)
+++ trunk/twxbbs/src/main/java/org/twdata/twxbbs/Container.java Sat Aug 30
08:14:38 2008
@@ -6,6 +6,7 @@
import org.twdata.twxbbs.proxy.ProxyManager;
import org.twdata.twxbbs.proxy.DefaultProxyManager;
import org.twdata.twxbbs.proxy.ProxyConnector;
+import org.twdata.twxbbs.proxy.script.DefaultScriptManager;
import org.twdata.twxbbs.config.impl.IniConfiguration;
import org.twdata.twxbbs.config.Configuration;
import org.twdata.twxbbs.event.EventManager;
@@ -42,9 +43,13 @@
objects.put(TemplateGenerator.class, new TemplateGenerator(
get(EventManager.class)
));
+ objects.put(DefaultScriptManager.class, new DefaultScriptManager(
+ get(EventManager.class)
+ ));
objects.put(ProxyManager.class, new DefaultProxyManager(
get(EventManager.class),
- get(ProxyConnector.class)));
+ get(ProxyConnector.class),
+ get(DefaultScriptManager.class)));
objects.put(GameListServlet.class, new GameListServlet(
get(GameAccessor.class),
get(TemplateGenerator.class)
Modified:
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/DefaultProxyManager.java
==============================================================================
---
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/DefaultProxyManager.java
(original)
+++
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/DefaultProxyManager.java
Sat Aug 30 08:14:38 2008
@@ -6,14 +6,15 @@
import org.twdata.twxbbs.GameRegistration;
import org.twdata.twxbbs.Container;
import org.twdata.twxbbs.proxy.script.ScriptIoFilter;
+import org.twdata.twxbbs.proxy.script.ScriptManager;
import org.twdata.twxbbs.config.ConfigurationRefreshedEvent;
import org.twdata.twxbbs.config.Configuration;
import org.twdata.twxbbs.event.EventManager;
import org.twdata.twxbbs.event.EventListener;
-import java.security.KeyStore;
import java.net.InetSocketAddress;
import java.net.URL;
+import java.net.MalformedURLException;
import java.io.IOException;
import java.io.File;
import java.util.List;
@@ -33,13 +34,12 @@
private int targetPort;
IoAcceptor acceptor;
private ProxyConnector connector;
- private List<URL> scripts;
+ private final ScriptManager scriptManager;
- public DefaultProxyManager(EventManager eventManager, ProxyConnector
connector) {
+ public DefaultProxyManager(EventManager eventManager, ProxyConnector
connector, ScriptManager scriptManager) {
this.connector = connector;
+ this.scriptManager = scriptManager;
eventManager.register(this);
- scripts = new ArrayList<URL>();
-
}
@EventListener
@@ -49,14 +49,6 @@
this.targetHost = config.getTwgsHost();
this.targetPort = config.getTwgsPort();
- scripts.clear();
- File scriptsDir = new File(config.getBaseDir(), "scripts");
- if (scriptsDir.exists()) {
- for (File file : scriptsDir.listFiles()) {
- scripts.add(file.toURI().toURL());
- }
- }
-
stop();
acceptor = new SocketAcceptor();
((SocketAcceptorConfig) acceptor.getDefaultConfig())
@@ -68,7 +60,7 @@
if (acceptor != null) {
// Create TCP/IP acceptor.
SocketAcceptorConfig cfg = new SocketAcceptorConfig();
- cfg.getFilterChain().addFirst("scripts", new
ScriptIoFilter(scripts));
+ cfg.getFilterChain().addFirst("sessionScripts", new
ScriptIoFilter(scriptManager));
acceptor
.bind(new InetSocketAddress(proxyPort), new
SessionSpecificIoHandler(connector, targetHost, targetPort), cfg);
System.out.println("Proxy started on port "+proxyPort+"
connecting to "+targetHost+":"+targetPort);
Added:
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/DefaultScriptManager.java
==============================================================================
--- (empty file)
+++
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/DefaultScriptManager.java
Sat Aug 30 08:14:38 2008
@@ -0,0 +1,110 @@
+package org.twdata.twxbbs.proxy.script;
+
+import org.twdata.twxbbs.config.ConfigurationRefreshedEvent;
+import org.twdata.twxbbs.config.Configuration;
+import org.twdata.twxbbs.event.EventListener;
+import org.twdata.twxbbs.event.EventManager;
+import org.twdata.twxbbs.Container;
+
+import java.io.IOException;
+import java.io.File;
+import java.net.URL;
+import java.net.MalformedURLException;
+import java.util.*;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: mrdon
+ * Date: 30/08/2008
+ * Time: 9:33:02 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class DefaultScriptManager implements ScriptManager {
+ private List<Thread> applicationScriptThreads;
+ private File scriptsDir;
+ private Configuration configuration;
+ private final Map<String,Object> applicationContext;
+
+ public DefaultScriptManager(EventManager eventManager) {
+ applicationContext = Collections.synchronizedMap(new
HashMap<String,Object>());
+ eventManager.register(this);
+ }
+
+ @EventListener
+ public synchronized void refresh(ConfigurationRefreshedEvent event)
throws IOException {
+ stop();
+ this.configuration = event.getConfiguration();
+ scriptsDir = new File(configuration.getBaseDir(), "scripts");
+ start();
+ }
+
+ private List<URL> collectScripts(String name) {
+ List<URL> scripts = new ArrayList<URL>();
+ if (scriptsDir.exists()) {
+ File sessionScriptsDir = new File(scriptsDir, name);
+ if (sessionScriptsDir.exists()) {
+ for (File file : sessionScriptsDir.listFiles()) {
+ if (!file.isDirectory()) {
+ try {
+ scripts.add(file.toURI().toURL());
+ } catch (MalformedURLException e) {
+ System.err.println("Unable to add
script:"+file.getAbsolutePath());
+ }
+ }
+ }
+ }
+ }
+ return scripts;
+ }
+
+ public void stop() {
+ if (applicationScriptThreads != null) {
+ for (Thread t : applicationScriptThreads) {
+ t.interrupt();
+ }
+ applicationScriptThreads.clear();
+ }
+ }
+
+ public boolean hasStarted() {
+ return (applicationScriptThreads != null
&& !applicationScriptThreads.isEmpty());
+ }
+
+ public void start() {
+ applicationScriptThreads = startScripts(ScriptType.application,
new ScriptVariablesFactory() {
+ public Map<String, Object> create() {
+ final Map<String,Object> vars = new
HashMap<String,Object>();
+ vars.put("configuration", configuration);
+ return vars;
+ }
+ });
+ }
+
+ @EventListener
+ public void shutdown(Container.ContainerStoppedEvent event) {
+ stop();
+ }
+
+ public List<Thread> startScripts(ScriptType type,
ScriptVariablesFactory varFactory) {
+ List<Thread> scriptThreads = new ArrayList<Thread>();
+ Map<String,Object> context = applicationContext;
+ if (type != ScriptType.application) {
+ context = new HashMap<String,Object>();
+ }
+ List<URL> scriptUrls = collectScripts(type.name());
+ for (URL url : scriptUrls) {
+
+ Map<String,Object> vars = varFactory.create();
+ if (type != ScriptType.application) {
+ vars.put("context", context);
+ }
+ vars.put("application", context);
+ Script script = new JavascriptScript(url, vars);
+ Thread t = new Thread(script);
+ scriptThreads.add(t);
+ System.out.println("Executing script "+url);
+ t.start();
+ }
+ return scriptThreads;
+ }
+}
Modified:
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/JavascriptScript.java
==============================================================================
---
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/JavascriptScript.java
(original)
+++
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/JavascriptScript.java
Sat Aug 30 08:14:38 2008
@@ -1,13 +1,12 @@
package org.twdata.twxbbs.proxy.script;
-import javax.script.ScriptEngine;
-import javax.script.ScriptEngineManager;
-import javax.script.ScriptException;
+import javax.script.*;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.util.Map;
+import java.util.HashMap;
/**
* Created by IntelliJ IDEA.
@@ -17,28 +16,21 @@
* To change this template use File | Settings | File Templates.
*/
public class JavascriptScript implements Script {
- private URL script;
- private ScriptApi gameApi;
- private ScriptApi playerApi;
- private Map<String,Object> session;
- private Map<String, Object> appContext;
+ private final URL script;
+ private final Map<String, Object> variables;
- public JavascriptScript(URL script, ScriptApi gameApi, ScriptApi
playerApi, Map<String,Object> session, Map<String,Object> appContext) {
+ public JavascriptScript(URL script, Map<String,Object> variables) {
this.script = script;
- this.gameApi = gameApi;
- this.playerApi = playerApi;
- this.session = session;
- this.appContext = appContext;
+ this.variables = variables;
}
public void run() {
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
- jsEngine.put("gameApi", gameApi);
- jsEngine.put("playerApi", playerApi);
- jsEngine.put("session", session);
- jsEngine.put("application", appContext);
+ for (Map.Entry<String,Object> entry : variables.entrySet()) {
+ jsEngine.put(entry.getKey(), entry.getValue());
+ }
readScriptIntoEngine(jsEngine,
getClass().getClassLoader().getResource("org/twdata/twxbbs/proxy/script/global.js"));
readScriptIntoEngine(jsEngine, script);
}
@@ -47,6 +39,8 @@
Reader scriptReader = null;
try {
scriptReader = new InputStreamReader(script.openStream());
+ jsEngine.put(ScriptEngine.NAME, script.toString());
+ jsEngine.put(ScriptEngine.FILENAME, script.toString());
jsEngine.eval(scriptReader);
} catch (ScriptException e) {
e.printStackTrace(); //To change body of catch statement use
File | Settings | File Templates.
Modified:
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptApi.java
==============================================================================
---
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptApi.java
(original)
+++
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptApi.java
Sat Aug 30 08:14:38 2008
@@ -19,4 +19,5 @@
void killTextTrigger(String id);
+ String stripAnsi(String text);
}
Modified:
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptApiImpl.java
==============================================================================
---
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptApiImpl.java
(original)
+++
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptApiImpl.java
Sat Aug 30 08:14:38 2008
@@ -71,6 +71,60 @@
lexer.removeTextTrigger(id);
}
+ public String stripAnsi(String text) {
+ return stripAnsi(text.getBytes(), text.length());
+ }
+
+ int NORMAL = 0, ESCAPE = 1, ESCAPE2 = 2, ESCAPE_STRING = 3;
+ int ansiState = NORMAL;
+
+ //hand made lexer to strip out pesky ansi escape codes
+ //we don't want the overhead of another lexer, and we can't do it in
the full lex
+ private String stripAnsi(byte[] b, int amount) {
+ int counter, rCounter, numbytes;
+
+ byte[] c = new byte[amount];
+ rCounter = 0;
+ for (counter = 0; counter < amount; counter++) {
+ char current = (char) b[counter];
+ switch (ansiState) {
+ case 0: //NORMAL:
+ if (current != 27 && current != 0) //get rid of those
pesky nulls
+ {
+ c[rCounter] = b[counter];
+ rCounter++;
+ } else if (current == 27) {
+ ansiState = ESCAPE;
+ }
+ break;
+ case 1: //ESCAPE:
+ if (current == '[' || Character.isDigit(current)) {
+ ansiState = ESCAPE2;
+ } else if (current == '\"') {
+ ansiState = ESCAPE_STRING;
+
+ }
+ break;
+ case 2: //ESCAPE2
+ if (Character.isLetter(current)) {
+ ansiState = NORMAL;
+ } else if (current == '[' ||
Character.isDigit(current)) {
+ ansiState = ESCAPE2;
+ } else {
+ ansiState = ESCAPE;
+ }
+ break;
+ case 3: //ESCAPE_STRING:
+ if (current == '\"') {
+ ansiState = ESCAPE;
+ }
+ break;
+ }
+ }
+
+ return new String(c, 0, rCounter);
+ }
+
public static interface TextSender {
void send(String text) throws Exception;
}
Modified:
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptIoFilter.java
==============================================================================
---
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptIoFilter.java
(original)
+++
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptIoFilter.java
Sat Aug 30 08:14:38 2008
@@ -18,12 +18,10 @@
*/
public class ScriptIoFilter extends IoFilterAdapter {
- private final List<URL> scriptUrls;
- private final Map<String,Object> applicationContext;
+ private final ScriptManager scriptManager;
- public ScriptIoFilter(List<URL> scriptUrls) {
- this.scriptUrls = scriptUrls;
- this.applicationContext = new HashMap<String,Object>();
+ public ScriptIoFilter(ScriptManager scriptManager) {
+ this.scriptManager = scriptManager;
}
@Override
@@ -65,30 +63,32 @@
@Override
public void sessionOpened(final NextFilter nextFilter, final IoSession
ioSession) throws Exception {
- List<Thread> scripts = new ArrayList<Thread>();
- List<ScriptLexer> gameLexers = new ArrayList<ScriptLexer>();
- List<ScriptLexer> playerLexers = new ArrayList<ScriptLexer>();
- Map<String,Object> sessionContext = new HashMap<String,Object>();
- for (URL url : scriptUrls) {
- ScriptLexer gameLexer = new ScriptLexer();
- ScriptApi gameApi = new ScriptApiImpl(gameLexer, new
ScriptApiImpl.TextSender() {
- public void send(String text) throws Exception {
- nextFilter.messageReceived(ioSession,
ByteBuffer.wrap(text.getBytes()));
- }
- });
- ScriptLexer playerLexer = new ScriptLexer();
- ScriptApi playerApi = new ScriptApiImpl(playerLexer, new
ScriptApiImpl.TextSender() {
- public void send(String text) throws Exception {
- nextFilter.filterWrite(ioSession, new
WriteRequest(ByteBuffer.wrap(text.getBytes())));
- }
- });
- Script script = new JavascriptScript(url, gameApi, playerApi,
sessionContext, applicationContext);
- gameLexers.add(gameLexer);
- playerLexers.add(playerLexer);
- Thread t = new Thread(script);
- scripts.add(t);
- t.start();
- }
+ final List<ScriptLexer> gameLexers = new ArrayList<ScriptLexer>();
+ final List<ScriptLexer> playerLexers = new
ArrayList<ScriptLexer>();
+ List<Thread> scripts =
scriptManager.startScripts(ScriptType.session, new ScriptVariablesFactory()
{
+
+ public Map<String, Object> create() {
+ Map<String,Object> vars = new HashMap<String,Object>();
+ ScriptLexer gameLexer = new ScriptLexer();
+ ScriptApi gameApi = new ScriptApiImpl(gameLexer, new
ScriptApiImpl.TextSender() {
+ public void send(String text) throws Exception {
+ nextFilter.messageReceived(ioSession,
ByteBuffer.wrap(text.getBytes()));
+ }
+ });
+ ScriptLexer playerLexer = new ScriptLexer();
+ ScriptApi playerApi = new ScriptApiImpl(playerLexer, new
ScriptApiImpl.TextSender() {
+ public void send(String text) throws Exception {
+ nextFilter.filterWrite(ioSession, new
WriteRequest(ByteBuffer.wrap(text.getBytes())));
+ }
+ });
+ vars.put("gameApi", gameApi);
+ vars.put("playerApi", playerApi);
+ gameLexers.add(gameLexer);
+ playerLexers.add(playerLexer);
+ return vars;
+ }
+ });
+
ioSession.setAttribute("gameLexers", gameLexers);
ioSession.setAttribute("playerLexers", playerLexers);
ioSession.setAttribute("scriptThreads", scripts);
Modified:
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptLexer.java
==============================================================================
---
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptLexer.java
(original)
+++
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptLexer.java
Sat Aug 30 08:14:38 2008
@@ -19,6 +19,7 @@
// The current line
private final StringBuffer currentLine;
+ private boolean resetCurrentLineNextCharacter;
// Contains text that isn't being actively matched, but may
private final CircularFifoBuffer backBuffer;
@@ -120,11 +121,7 @@
if (capturing) {
captureBuffer.append(c);
- System.out.println("adding to buffer:"+captureBuffer);
} else {
- if (captureBuffer.length() > 0) {
- System.out.println("Clearing buffer");
- }
for (int x=0; x<captureBuffer.length(); x++) {
readCopyBuffer.putChar(captureBuffer.charAt(x));
}
@@ -159,11 +156,15 @@
}
private void putInCurrentLine(char c) {
+ if (resetCurrentLineNextCharacter) {
+ currentLine.setLength(0);
+ resetCurrentLineNextCharacter = false;
+ }
if (c != '\n') {
if (c != '\r')
currentLine.append(c);
} else {
- currentLine.setLength(0);
+ resetCurrentLineNextCharacter = true;
}
}
Added:
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptManager.java
==============================================================================
--- (empty file)
+++
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptManager.java
Sat Aug 30 08:14:38 2008
@@ -0,0 +1,20 @@
+package org.twdata.twxbbs.proxy.script;
+
+import org.twdata.twxbbs.StartableManager;
+
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: mrdon
+ * Date: 31/08/2008
+ * Time: 12:11:21 AM
+ * To change this template use File | Settings | File Templates.
+ */
+public interface ScriptManager extends StartableManager {
+ void stop();
+
+ void start();
+
+ List<Thread> startScripts(ScriptType type, ScriptVariablesFactory
varFactory);
+}
Added:
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptType.java
==============================================================================
--- (empty file)
+++
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptType.java
Sat Aug 30 08:14:38 2008
@@ -0,0 +1,13 @@
+package org.twdata.twxbbs.proxy.script;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: mrdon
+ * Date: 30/08/2008
+ * Time: 11:24:57 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public enum ScriptType {
+ session,
+ application
+}
Added:
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptVariablesFactory.java
==============================================================================
--- (empty file)
+++
trunk/twxbbs/src/main/java/org/twdata/twxbbs/proxy/script/ScriptVariablesFactory.java
Sat Aug 30 08:14:38 2008
@@ -0,0 +1,14 @@
+package org.twdata.twxbbs.proxy.script;
+
+import java.util.Map;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: mrdon
+ * Date: 31/08/2008
+ * Time: 12:00:53 AM
+ * To change this template use File | Settings | File Templates.
+ */
+public interface ScriptVariablesFactory {
+ Map<String,Object> create();
+}
Modified:
trunk/twxbbs/src/main/resources/org/twdata/twxbbs/proxy/script/global.js
==============================================================================
---
trunk/twxbbs/src/main/resources/org/twdata/twxbbs/proxy/script/global.js
(original)
+++
trunk/twxbbs/src/main/resources/org/twdata/twxbbs/proxy/script/global.js
Sat Aug 30 08:14:38 2008
@@ -11,7 +11,7 @@
this.pause = function() {
var id = lexer.pause();
if (id != null) {
- triggerCallbacks[id](lexer.getMatchedLine());
+ triggerCallbacks[id](lexer.stripAnsi(lexer.getMatchedLine()));
}
}
this.killTextTrigger = function(id) {
@@ -36,4 +36,8 @@
}
var game = new Api(gameApi);
-var player = new Api(playerApi);
\ No newline at end of file
+var player = new Api(playerApi);
+
+function stripAnsi(txt) {
+ return gameApi.stripAnsi(txt);
+}