Merge pull request #78 from VE-FORBRYDERNE/patch
Allow remote mode to load from client-side story files
This commit is contained in:
commit
4af0d9dabd
25
aiserver.py
25
aiserver.py
|
@ -1,6 +1,6 @@
|
||||||
#==================================================================#
|
#==================================================================#
|
||||||
# KoboldAI
|
# KoboldAI
|
||||||
# Version: 1.16.3
|
# Version: 1.16.4
|
||||||
# By: KoboldAIDev and the KoboldAI Community
|
# By: KoboldAIDev and the KoboldAI Community
|
||||||
#==================================================================#
|
#==================================================================#
|
||||||
|
|
||||||
|
@ -647,6 +647,8 @@ def get_message(msg):
|
||||||
savetofile()
|
savetofile()
|
||||||
elif(not vars.remote and msg['cmd'] == 'loadfromfile'):
|
elif(not vars.remote and msg['cmd'] == 'loadfromfile'):
|
||||||
loadfromfile()
|
loadfromfile()
|
||||||
|
elif(msg['cmd'] == 'loadfromstring'):
|
||||||
|
loadRequest(json.loads(msg['data']), filename=msg['filename'])
|
||||||
elif(not vars.remote and msg['cmd'] == 'import'):
|
elif(not vars.remote and msg['cmd'] == 'import'):
|
||||||
importRequest()
|
importRequest()
|
||||||
elif(msg['cmd'] == 'newgame'):
|
elif(msg['cmd'] == 'newgame'):
|
||||||
|
@ -2096,14 +2098,21 @@ def loadfromfile():
|
||||||
#==================================================================#
|
#==================================================================#
|
||||||
# Load a stored story from a file
|
# Load a stored story from a file
|
||||||
#==================================================================#
|
#==================================================================#
|
||||||
def loadRequest(loadpath):
|
def loadRequest(loadpath, filename=None):
|
||||||
if(loadpath):
|
if(loadpath):
|
||||||
# Leave Edit/Memory mode before continuing
|
# Leave Edit/Memory mode before continuing
|
||||||
exitModes()
|
exitModes()
|
||||||
|
|
||||||
# Read file contents into JSON object
|
# Read file contents into JSON object
|
||||||
file = open(loadpath, "r")
|
if(isinstance(loadpath, str)):
|
||||||
|
with open(loadpath, "r") as file:
|
||||||
js = json.load(file)
|
js = json.load(file)
|
||||||
|
if(filename is None):
|
||||||
|
filename = path.basename(loadpath)
|
||||||
|
else:
|
||||||
|
js = loadpath
|
||||||
|
if(filename is None):
|
||||||
|
filename = "untitled.json"
|
||||||
|
|
||||||
# Copy file contents to vars
|
# Copy file contents to vars
|
||||||
vars.gamestarted = js["gamestarted"]
|
vars.gamestarted = js["gamestarted"]
|
||||||
|
@ -2149,8 +2158,6 @@ def loadRequest(loadpath):
|
||||||
})
|
})
|
||||||
num += 1
|
num += 1
|
||||||
|
|
||||||
file.close()
|
|
||||||
|
|
||||||
# Save path for save button
|
# Save path for save button
|
||||||
vars.savedir = loadpath
|
vars.savedir = loadpath
|
||||||
|
|
||||||
|
@ -2158,10 +2165,10 @@ def loadRequest(loadpath):
|
||||||
vars.loadselect = ""
|
vars.loadselect = ""
|
||||||
|
|
||||||
# Refresh game screen
|
# Refresh game screen
|
||||||
filename = path.basename(loadpath)
|
_filename = filename
|
||||||
if(filename.endswith('.json')):
|
if(filename.endswith('.json')):
|
||||||
filename = filename[:-5]
|
_filename = filename[:-5]
|
||||||
vars.laststory = filename
|
vars.laststory = _filename
|
||||||
emit('from_server', {'cmd': 'setstoryname', 'data': vars.laststory}, broadcast=True)
|
emit('from_server', {'cmd': 'setstoryname', 'data': vars.laststory}, broadcast=True)
|
||||||
sendwi()
|
sendwi()
|
||||||
emit('from_server', {'cmd': 'setmemory', 'data': vars.memory}, broadcast=True)
|
emit('from_server', {'cmd': 'setmemory', 'data': vars.memory}, broadcast=True)
|
||||||
|
@ -2169,7 +2176,7 @@ def loadRequest(loadpath):
|
||||||
refresh_story()
|
refresh_story()
|
||||||
emit('from_server', {'cmd': 'setgamestate', 'data': 'ready'}, broadcast=True)
|
emit('from_server', {'cmd': 'setgamestate', 'data': 'ready'}, broadcast=True)
|
||||||
emit('from_server', {'cmd': 'hidegenseqs', 'data': ''}, broadcast=True)
|
emit('from_server', {'cmd': 'hidegenseqs', 'data': ''}, broadcast=True)
|
||||||
print("{0}Story loaded from {1}!{2}".format(colors.GREEN, path.basename(loadpath), colors.END))
|
print("{0}Story loaded from {1}!{2}".format(colors.GREEN, filename, colors.END))
|
||||||
|
|
||||||
#==================================================================#
|
#==================================================================#
|
||||||
# Import an AIDungon game exported with Mimi's tool
|
# Import an AIDungon game exported with Mimi's tool
|
||||||
|
|
|
@ -77,6 +77,7 @@ var saved_prompt = "...";
|
||||||
var override_focusout = false;
|
var override_focusout = false;
|
||||||
var sman_allow_delete = false;
|
var sman_allow_delete = false;
|
||||||
var sman_allow_rename = false;
|
var sman_allow_rename = false;
|
||||||
|
var remote = false;
|
||||||
|
|
||||||
// This is true iff [we're in macOS and the browser is Safari] or [we're in iOS]
|
// This is true iff [we're in macOS and the browser is Safari] or [we're in iOS]
|
||||||
var using_webkit_patch = true;
|
var using_webkit_patch = true;
|
||||||
|
@ -1516,7 +1517,8 @@ $(document).ready(function(){
|
||||||
// Update adventure state
|
// Update adventure state
|
||||||
setadventure(msg.data);
|
setadventure(msg.data);
|
||||||
} else if(msg.cmd == "runs_remotely") {
|
} else if(msg.cmd == "runs_remotely") {
|
||||||
hide([button_loadfrfile, button_savetofile, button_import, button_importwi]);
|
remote = true;
|
||||||
|
hide([button_savetofile, button_import, button_importwi]);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1583,7 +1585,20 @@ $(document).ready(function(){
|
||||||
});
|
});
|
||||||
|
|
||||||
button_loadfrfile.on("click", function(ev) {
|
button_loadfrfile.on("click", function(ev) {
|
||||||
|
if(remote) {
|
||||||
|
$("#remote-save-select").click();
|
||||||
|
} else {
|
||||||
socket.send({'cmd': 'loadfromfile', 'data': ''});
|
socket.send({'cmd': 'loadfromfile', 'data': ''});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#remote-save-select").on("change", function() {
|
||||||
|
var reader = new FileReader();
|
||||||
|
var file = $("#remote-save-select")[0].files[0];
|
||||||
|
reader.addEventListener("load", function(response) {
|
||||||
|
socket.send({'cmd': 'loadfromstring', 'filename': file.name, 'data': response.target.result});
|
||||||
|
}, false);
|
||||||
|
reader.readAsText(file);
|
||||||
});
|
});
|
||||||
|
|
||||||
button_import.on("click", function(ev) {
|
button_import.on("click", function(ev) {
|
||||||
|
|
|
@ -6,17 +6,18 @@
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<script src="static/jquery-3.6.0.min.js"></script>
|
<script src="static/jquery-3.6.0.min.js"></script>
|
||||||
<script src="static/socket.io.min.js"></script>
|
<script src="static/socket.io.min.js"></script>
|
||||||
<script src="static/application.js?ver=1.16.2j"></script>
|
<script src="static/application.js?ver=1.16.4a"></script>
|
||||||
<script src="static/bootstrap.min.js"></script>
|
<script src="static/bootstrap.min.js"></script>
|
||||||
<script src="static/bootstrap-toggle.min.js"></script>
|
<script src="static/bootstrap-toggle.min.js"></script>
|
||||||
<script src="static/rangy-core.min.js"></script>
|
<script src="static/rangy-core.min.js"></script>
|
||||||
|
|
||||||
<link rel="stylesheet" href="static/bootstrap.min.css">
|
<link rel="stylesheet" href="static/bootstrap.min.css">
|
||||||
<link rel="stylesheet" href="static/bootstrap-toggle.min.css">
|
<link rel="stylesheet" href="static/bootstrap-toggle.min.css">
|
||||||
<link rel="stylesheet" href="static/custom.css?ver=1.16.2a">
|
<link rel="stylesheet" href="static/custom.css?ver=1.16.4a">
|
||||||
<link rel="stylesheet" href="static/open-iconic-bootstrap.min.css">
|
<link rel="stylesheet" href="static/open-iconic-bootstrap.min.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<input type="file" id="remote-save-select" accept="application/json" style="display:none">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row" id="topmenu">
|
<div class="row" id="topmenu">
|
||||||
<div id="menuitems">
|
<div id="menuitems">
|
||||||
|
|
Loading…
Reference in New Issue