mirror of
https://bitbucket.org/grumdrig/pq-web.git
synced 2026-09-29 00:34:00 -06:00
Multiplayer code in place but not tested with server yet
This commit is contained in:
committed by
Eric Fredricksen
parent
d389d7d8df
commit
48cc250bff
@@ -234,6 +234,10 @@ function SqlStorage() {
|
||||
};
|
||||
}
|
||||
|
||||
function UrlEncode(s) {
|
||||
return encodeURIComponent(s).replace(/%20/g, "+");
|
||||
}
|
||||
|
||||
var iPad = navigator.userAgent.match(/iPad/);
|
||||
var iPod = navigator.userAgent.match(/iPod/);
|
||||
var iPhone = navigator.userAgent.match(/iPhone/);
|
||||
@@ -308,6 +312,13 @@ function LevelUpTime(level) { // seconds
|
||||
}
|
||||
|
||||
|
||||
let RevString = '&rev=6';
|
||||
// Rev strings known to server, probably:
|
||||
// rev=3 is the minimum allowed by server, probably pq6.1
|
||||
// rev=4 is pq6.2 the longstanding delphi client
|
||||
// rev=5 is pq6.3 presumably the lazarus port or other unofficial release
|
||||
// rev=6 is this here, pq-web multiplayer enabled
|
||||
|
||||
var K = {};
|
||||
|
||||
K.Traits = ["Name", "Race", "Class", "Level"];
|
||||
|
||||
@@ -962,7 +962,7 @@ function FormCreate() {
|
||||
return "Are you sure you want to quit? All your progress will be lost!";
|
||||
});
|
||||
|
||||
$(window).unload(function (event) {
|
||||
$(window).on('unload', function (event) {
|
||||
StopTimer();
|
||||
SaveGame();
|
||||
if (storage.async) {
|
||||
@@ -1075,8 +1075,8 @@ function LoadGame(sheet) {
|
||||
function GameSaveName() {
|
||||
if (!game.saveName) {
|
||||
game.saveName = Get(Traits, 'Name');
|
||||
if (game.realm)
|
||||
game.saveName += ' [' + game.realm + ']';
|
||||
if (game.online)
|
||||
game.saveName += ' [' + game.online.realm + ']';
|
||||
}
|
||||
return game.saveName;
|
||||
}
|
||||
@@ -1121,11 +1121,11 @@ function FormKeyDown(e) {
|
||||
if (game.online) {
|
||||
if (key === 'b') {
|
||||
Brag('brag');
|
||||
//Navigate(GetHostAddr() + 'name=' + UrlEncode(Get(Traits,'Name')));
|
||||
// Navigate(game.online.host + 'name=' + UrlEncode(Get(Traits,'Name')));
|
||||
}
|
||||
|
||||
if (key === 'g') {
|
||||
game.guild = InputBox('Choose a guild.\r\rMake sure you undestand the guild rules before you join one. To learn more about guilds, visit http://progressquest.com/guilds.php', game.guild);
|
||||
game.guild = InputBox('Choose a guild.\n\nMake sure you undestand the guild rules before you join one. To learn more about guilds, visit http://progressquest.com/guilds.php\n', game.guild);
|
||||
Brag("guild");
|
||||
}
|
||||
|
||||
@@ -1168,20 +1168,41 @@ function Navigate(url) {
|
||||
function LFSR(pt, salt) {
|
||||
var result = salt;
|
||||
for (var k = 1; k <= Length(pt); ++k)
|
||||
result = Ord(pt[k]) ^ (result << 1) ^ (1 && ((result >> 31) ^ (result >> 5)));
|
||||
result = pt.charCodeAt(k) ^ (result << 1) ^ (1 && ((result >> 31) ^ (result >> 5)));
|
||||
for (var kk = 1; kk <= 10; ++kk)
|
||||
result = (result << 1) ^ (1 && ((result >> 31) ^ (result >> 5)));
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
function Brag(trigger) {
|
||||
SaveGame();
|
||||
if (game.online) {
|
||||
game.bragtrigger = trigger;
|
||||
$.post("webrag.php", game, function (data, textStatus, request) {
|
||||
if (data.alert)
|
||||
alert(data.alert);
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
|
||||
if (game.online) {
|
||||
// game.bragtrigger = trigger;
|
||||
// $.post("webrag.php", game, function (data, textStatus, request) {
|
||||
// if (data.alert)
|
||||
// alert(data.alert);
|
||||
// }, "json");
|
||||
|
||||
let url = game.online.host + 'cmd=b&t=' + trigger;
|
||||
for (trait in game.Traits) {
|
||||
url += '&' + LowerCase(trait.substr(0,1)) + '=' + UrlEncode(game.Traits[trait]);
|
||||
}
|
||||
url += '&x=' + IntToStr(ExpBar.Position());
|
||||
url += '&i=' + UrlEncode(game.bestequip);
|
||||
url += '&z=' + UrlEncode(game.bestspell);
|
||||
url += '&k=' + UrlEncode(game.beststat);
|
||||
|
||||
url += '&a=' + UrlEncode(game.bestplot);
|
||||
url += '&h=' + UrlEncode(game.online.realm);
|
||||
url += RevString;
|
||||
url += '&p=' + IntToStr(LFSR(url, game.online.passkey));
|
||||
url += '&m=' + UrlEncode(game.motto || '');
|
||||
$.ajax(url)
|
||||
.then(body => {
|
||||
if (LowerCase(Split(body,0)) = 'report') {
|
||||
ShowMessage(Split(body,1));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
+9
-2
@@ -42,13 +42,20 @@ fieldset table td {
|
||||
width: 185px;
|
||||
}
|
||||
|
||||
#races, #classes, #stats {
|
||||
#races, #classes {
|
||||
height: 372px;
|
||||
}
|
||||
|
||||
#stats {
|
||||
#stats, #gametype {
|
||||
width: 109px;
|
||||
}
|
||||
#stats {
|
||||
height: 308px;
|
||||
}
|
||||
#gametype {
|
||||
margin-top: 4px;
|
||||
height: 58px;
|
||||
}
|
||||
|
||||
.window#newguy .vbox button {
|
||||
width: 75px;
|
||||
|
||||
+17
-10
@@ -34,11 +34,6 @@ input, button { display: inline; }
|
||||
Name
|
||||
<input id="Name" spellcheck="false">
|
||||
<button id="RandomName">?</button>
|
||||
<!--
|
||||
<span style="float:right;padding-right:20px">
|
||||
<input type="checkbox" checked id="multiplayer"/><label for="multiplayer">Play online</label>
|
||||
</span>
|
||||
-->
|
||||
</div>
|
||||
|
||||
<div class=hbox>
|
||||
@@ -53,7 +48,8 @@ input, button { display: inline; }
|
||||
<legend>Class</legend>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="vbox groupbox" id="stats">
|
||||
<div class="vbox">
|
||||
<fieldset class="groupbox" id="stats">
|
||||
<legend>Stats</legend>
|
||||
|
||||
<table>
|
||||
@@ -67,9 +63,6 @@ input, button { display: inline; }
|
||||
<tr> <th> Total <td id="Total">48</tr>
|
||||
</table>
|
||||
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
@@ -81,11 +74,25 @@ input, button { display: inline; }
|
||||
<br>
|
||||
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="groupbox" id="gametype">
|
||||
<legend>Game Type</legend>
|
||||
<div><input type=radio id=single name=online value=false checked/>
|
||||
<label for=single>Single player</label></div>
|
||||
<div><input type=radio id=multiplayer name=online value=true/>
|
||||
<label for=multiplayer>Mulitplayer</label></div>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class=hbox>
|
||||
</div>
|
||||
|
||||
<div class=hbox style="text-align:right;padding-top:15px">
|
||||
<button id=Sold>Sold!</button>
|
||||
|
||||
|
||||
<button id=Sold>Sold!</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -108,53 +108,6 @@ function NewGuyFormLoad() {
|
||||
if (document)
|
||||
$(document).ready(NewGuyFormLoad);
|
||||
|
||||
/* Multiplayer:
|
||||
function TNewGuyForm_ParseSoldResponse(body) {
|
||||
if ((LowerCase(Split(body,0)) == 'ok')) {
|
||||
MainForm.SetPasskey(Split(body,1));
|
||||
MainForm.SetLogin(GetAccount);
|
||||
MainForm.SetPassword(GetPassword);
|
||||
ModalResult = mrOk;
|
||||
} else {
|
||||
ShowMessage(body);
|
||||
}
|
||||
}
|
||||
|
||||
function TNewGuyForm_GetAccount() {
|
||||
return Account.Visible ? Account.Text : '';
|
||||
}
|
||||
|
||||
function TNewGuyForm_GetPassword() {
|
||||
return (Password.Visible) ? Password.Text : '';
|
||||
}
|
||||
|
||||
function TNewGuyForm_SoldClick() {
|
||||
if (MainForm.GetHostAddr == '') {
|
||||
ModalResult = mrOk;
|
||||
} else {
|
||||
try {
|
||||
Screen.Cursor = crHourglass;
|
||||
try {
|
||||
if ((MainForm.Label8.Tag && 16) == 0
|
||||
) url = MainForm.GetHostAddr
|
||||
else url = 'http://www.progressquest.com/create.php?';
|
||||
// url = StringReplace(url, '.com/', '.com/dev/', []);
|
||||
if ((GetAccount() != '') || (GetPassword != ''))
|
||||
url = StuffString(url, 8, 0, GetAccount() + ':' + GetPassword() + '@');
|
||||
args = 'cmd=create' +
|
||||
'&name=' + escape(Name.Text) +
|
||||
'&realm=' + escape(MainForm.GetHostName) +
|
||||
RevString;
|
||||
ParseSoldResponse(DownloadString(url + args));
|
||||
} catch (EWebError) {
|
||||
ShowMessage('Error connecting to server');
|
||||
}
|
||||
} finally {
|
||||
Screen.Cursor = crDefault;
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
function sold() {
|
||||
var newguy = {
|
||||
@@ -191,15 +144,6 @@ function sold() {
|
||||
]
|
||||
};
|
||||
|
||||
/*
|
||||
if ($("#multiplayer:checked").length > 0) {
|
||||
newguy.online = {
|
||||
realm: "Alpaquil",
|
||||
host: "http://progressquest.com/alpa.php",
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
if (document) {
|
||||
newguy.Traits.Name = $("#Name").val();
|
||||
newguy.Traits.Race = $("input:radio[name=Race]:checked").val();
|
||||
@@ -214,10 +158,43 @@ function sold() {
|
||||
newguy.Equips.Weapon = newguy.bestequip;
|
||||
newguy.Equips.Hauberk = "-3 Burlap";
|
||||
|
||||
storage.addToRoster(newguy, function () {
|
||||
window.location.href = "main.html#" + escape(newguy.Traits.Name);
|
||||
});
|
||||
|
||||
if ($("#multiplayer:checked").length > 0) {
|
||||
newguy.online = {
|
||||
realm: "Alpaquil",
|
||||
// host: "http://progressquest.com/alpaquil.php?",
|
||||
host: "http://localhost:9001/alpaquil.php?",
|
||||
}
|
||||
|
||||
$("#sold").prop("disabled", true);
|
||||
$("body").css("cursor", "progress");
|
||||
|
||||
let url = newguy.online.host;
|
||||
url += 'cmd=create' +
|
||||
'&name=' + UrlEncode(newguy.Traits.Name) +
|
||||
'&realm=' + UrlEncode(newguy.online.realm) +
|
||||
RevString;
|
||||
$.ajax(url)
|
||||
.done(body => {
|
||||
if (body.split('|')[0].toLowerCase() == 'ok') {
|
||||
newguy.online.passkey = body.split('|')[1];
|
||||
charIsBorn(newguy);
|
||||
} else {
|
||||
$("#sold").prop("disabled", false);
|
||||
$("body").css("cursor", "default");
|
||||
alert(body);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
charIsBorn(newguy);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function charIsBorn(newguy) {
|
||||
storage.addToRoster(newguy, function () {
|
||||
window.location.href = "main.html#" + UrlEncode(newguy.Traits.Name);
|
||||
});
|
||||
}
|
||||
|
||||
function cancel() {
|
||||
|
||||
Reference in New Issue
Block a user