Here's what I sniffed so far.
Code:
GET /res/js/bns.market.jquery.js?v=1410281030 HTTP/1.1
Host: na-bnsmarket.ncsoft.com
Connection: keep-alive
User-Agent: BnsIngameBrowser
Referer: http://na-bnsmarket.ncsoft.com/bns/bidder/home.web?npc=false
Accept: */*
Accept-Encoding: gzip,deflate
Accept-Charset: ,utf-8;q=0.7,*;q=0.3
Cookie: commonWebPath=/web; localWebPath=/english/web; language=en; GPVLU=396cb904b7aa4f4cd79fcd5f727b3b2833bfc135d4fb4eeb741df60c16ee476219dc69b22950af6120a0fb0534b3638befb6cc03b9fe8e084a1a222355efd1d24a1a222355efd1d24a1a222355efd1d24a1a222355efd1d24a1a222355efd1d24a1a222355efd1d24a1a222355efd1d24a1a222355efd1d24a1a222355efd1d24a1a222355efd1d24a1a222355efd1d24a1a222355efd1d24a1a222355efd1d24a1a222355efd1d24a1a222355efd1d2774b7791592d95892fe5dd5ccb15b09ea5892ab2dbba128555531a450067046d68c131fcc14fd05067717f40c4648b5850da5d87cd8c12177da728c62b5fcb7a02eeb599aad063e173971bd3eee5b950; SessionIndex=1; presence=2; pc=lvExAAAAAAA=; world=109; pcName=Flora%20Valentine; pcLevel=20; pcMasteryLevel=0; pcRace=LYN; pcJob=SU; pcFaction=1; pcFaction2=0; pcSex=FEMALE; pcMoney=138435; uiColorIndex=23; uiColorRed=110; uiColorGreen=110; uiColorBlue=110; uiColorAlpha=128; GPGAMEBNSMARKETFROMNPC=false; JSESSIONID=9E869186A0CD4117DAFA8EB5019A1258.ncw-bladensoule-web-01
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Last-Modified: Fri, 11 Dec 2015 17:33:52 GMT
Content-Type: application/javascript;charset=UTF-8
Content-Length: 9776
Date: Fri, 01 Apr 2016 18:53:41 GMT
Connection: close
var BNS = (function (B, $) {
var callback = {};
function isSuccess (status) {
var code = ($.type(status) !== "string") ? String(status) : status;
return code === "1" ? true : false;
}
// register callback function
B.registerCallback = function (name, func) {
callback[name] = func;
};
// callback for RegisterBid
B.attendAuction = function (sale, status, price) {
if (isSuccess(status)) callback["attendAuction"](sale, price);
};
// callback for UpdateBid
B.rebid = function (sale, bid, status, inc) {
if (isSuccess(status)) callback["rebid"](sale, bid, inc);
};
// callback for RegisterPurchase
B.purchase = function (sale, status) {
if (isSuccess(status)) callback["purchase"](sale);
};
// callback for drag and drop or right click on item
B.setItem = function (item, level, pos, amount, max) {
callback["setItem"](item, pos, amount, max);
};
// callback for rgith click on waiting for sale item
B.clearItemToSell = function () {
callback["clearItemToSell"]();
};
//callback for RegisterSale
B.register = function () {
callback["register"]();
};
// callback for AbandonBid
B.abandonBid = function (sale, status) {
if (isSuccess(status)) callback["abandonBid"](sale);
};
// callback for ctrl + left click on item
B.setItemName = function (itemName) {
callback["setItemName"](itemName);
};
// callback for cancel sale
B.cancelSaleResult = function (saleId, result) {
callback["cancelSaleResult"](saleId, result);
}
return B;
}(BNS || {}, jQuery));
BNS.Command = (function () {
var commands = {
HOME:"nc://bns.Market/Home",
SEARCH:"nc://bns.Market/Search",
REGISTER_BID:"nc://bns.Market/RegisterBid",
UPDATE_BID:"nc://bns.Market/UpdateBid",
REGISTER_PURCHASE:"nc://bns.Market/RegisterPurchase",
SELL:"nc://bns.Market/Sell",
REGISTER_SALE:"nc://bns.Market/RegisterSale",
MY_BIDS:"nc://bns.Market/MyBids",
ABANDON_BID:"nc://bns.Market/AbandonBid",
ITEM_TOOLTIP:"nc://bns.Market/ItemTooltip",
INVEN_ITEM_TOOLTIP:"nc://bns.Market/InventoryItemTooltip",
OPEN_CONTEXT_MENU:"nc://bns.Market/OpenContextMenu",
CLEAR_ITEM_TO_SELL:"nc://bns.Market/ClearItemToSell",
SET_EDITBOX_VALUE:"nc://bns.Market/SetEditBoxValue",
CANCEL_SALE:"nc://bns.Market/CancelSale",
CHART_LOWPRICE:"/bns/chart/lowprice.web",
CHART_OHLC:"/bns/chart/ohlc.web",
// item preview and hyper text
ITEM_PREVIEW:"nc://bns.Common/ItemPreview",
ITEM_HYPERTEXT:"nc://bns.Common/ItemHyperText",
//available http reuqest (2012/07/17)
WEB_SELL:"/bns/seller/home.web",
SELL_ITEM_INFO:"/bns/seller/item.web",
SELL_ITEM_PRICE:"/bns/seller/itemprice.web",
BIDDERS_INFO:"/bns/bidder/bidders.web",
PURCHASE_LOG:"/bns/bidder/purchaselog.web",
FAVORITE:"/bns/favorite/items.web",
ADD_FAVORITE:"/bns/favorite/insert.web",
DELETE_FAVORITE:"/bns/favorite/delete.web",
COMMON_ITEM_TOOLTIP:"nc://bns.Common/ItemTooltip"
};
//commands.MY_BIDS = "/bns/bidder/attends.web";
//commands.SEARCH = "/bns/bidder/search.web";
//commands.SELL = "/bns/seller/home.web";
return commands;
}());
BNS.Constants = (function () {
var constants = {
MAX_MONEY:"15000000000"
};
return constants;
}());
BNS.Util = (function (CMD, $) {
function isPossibleJob(itemJob1, itemJob2, characterJob) {
if (itemJob1 == "NONE" && itemJob2 == "NONE") return true;
if (itemJob1 == "" && itemJob2 == "") return true;
if (itemJob1 == characterJob || itemJob2 == characterJob) return true;
return false;
}
var Util = {};
// make title attribute in element using data json object (data.item, data.amount, data.price, data.topPrice, data.type)
Util.itemToolTip = function (element, data) {
var obj = (element instanceof jQuery) ? element : $(element);
var title;
if (data.topPrice) {
title = CMD.ITEM_TOOLTIP+"?itemId="+data.item+"&itemLevel=1"+"&amount="+data.amount+"&price="+data.price+"&topprice="+data.topPrice+"&type="+data.type;
} else {
title = CMD.ITEM_TOOLTIP+"?itemId="+data.item+"&itemLevel=1"+"&amount="+data.amount+"&price="+data.price+"&topprice="+data.price+"&type="+data.type;
}
obj.attr("title", title);
obj.on("click", function(event) {
if (event.shiftKey) location.href=CMD.ITEM_PREVIEW+"?itemId="+data.item + "&itemLevel=1";
else if (event.ctrlKey) location.href=CMD.ITEM_HYPERTEXT+"?itemId="+data.item + "&itemLevel=1";
});
};
Util.commonItemToolTip = function (element, itemId) {
var obj = (element instanceof jQuery) ? element : $(element);
var title = CMD.COMMON_ITEM_TOOLTIP + "?itemId=" + itemId + "&itemLevel=1";
obj.attr("title", title);
};
// add icon (seal item, level, job, race, sex)
//seal item -> lock item -> level item
Util.itemlIcon = function (element, data, character) {
Util.itemSeallIcon(element, data, character);
if ((character.job != "" && character.race != "") && (data.job != "" && character.race != "")) Util.itemLockIcon(element, data, character);
if (character.level > 0 && data.level > 0) Util.itemLevelIcon(element, data, character);
};
Util.itemSeallIcon = function (element, data, character) {
var obj = (element instanceof jQuery) ? element : $(element);
if ((data.name).indexOf(Messages.get("market.js.common.text.seal")) > -1) {
//if ((data.name).indexOf(".........") > -1) {
obj.attr("class", "iconLock Seal ItemLink");
obj.html(Messages.get("market.js.common.text.unseal"));
//obj.html("............");
}
};
Util.itemLevelIcon = function (element, data, character) {
var obj = (element instanceof jQuery) ? element : $(element);
if (obj.attr("class") == "") {
if (parseInt(data.level, 10) > parseInt(character.level, 10)) {
obj.attr("class", "iconLock Level ItemLink");
obj.html(Messages.get("market.js.common.text.level"));
//obj.html("............");
}
}
};
Util.itemLockIcon = function (element, data, character) {
var obj = (element instanceof jQuery) ? element : $(element);
if (obj.attr("class") == "") { //job, race, sex
if ( isPossibleJob(data.job1, data.job2, character.job) == false
|| (data.race == "NONE" || data.race == "" || data.race == "CAT" || (data.race == character.race)) == false
|| (data.sex == "NONE" || data.sex == "" || data.sex == character.sex || (data.sex == "FEMALE" && character.sex == "FAMALE")) == false ) {
obj.attr("class", "iconLock Job ItemLink");
obj.html(Messages.get("market.js.common.text.lock"));
//obj.html("............");
}
}
};
// make title attribute in element using pos
Util.inventoryItemToolTip = function (element, pos, max) {
var obj = (element instanceof jQuery) ? element : $(element);
var title = CMD.INVEN_ITEM_TOOLTIP+"?pos="+pos+"&amount="+max;
obj.attr("title", title);
};
// make money (number type)
Util.money = function (gold, silver, bronze) {
var gp = parseInt(gold, 10);
var sp = parseInt(silver, 10);
var bp = parseInt(bronze, 10);
return (isNaN(gp) === true ? 0 : gp)*10000 + (isNaN(sp) === true ? 0 : sp)*100 + (isNaN(bp) === true ? 0 : bp);
};
Util.money.string = function (price) {
return "<money>"+price+"</money>";
};
Util.money.object = function (price) {
var gold = parseInt(price / 10000 , 10);
var silver = parseInt((price % 10000) / 100 , 10);
var bronze = price % 100;
return {"gold":gold,"silver":silver,"bronze":bronze};
};
Util.money.html = function (price) {
var money = Util.money.object(price);
var html = "";
if (money.gold > 0) html += "<span class='gold'>" + parseInt(money.gold, 10) + " <span>" + Messages.get("market.js.common.text.price_gold") + "</span></span>";
if (money.silver > 0) html += "<span class='silver'>" +parseInt( money.silver, 10) +" <span>" + Messages.get("market.js.common.text.price_silver") + "</span></span>";
if (money.bronze > 0) html += "<span class='bronze'>" + parseInt(money.bronze, 10) + " <span>" + Messages.get("market.js.common.text.price_bronze") + "</span></span>";
//if (money.gold > 0) html += "<span class='gold'>" + parseInt(money.gold, 10) + " <span>...</span></span>";
//if (money.silver > 0) html += "<span class='silver'>" +parseInt( money.silver, 10) +" <span>...</span></span>";
//if (money.bronze > 0) html += "<span class='bronze'>" + parseInt(money.bronze, 10) + " <span>...</span></span>";
return html;
};
return Util;
}(BNS.Command, jQuery));
BNS.Ui = (function ($) {
var Ui = {};
function NumericInput (obj, callback) {
this.ctx = $(obj);
this.maxLength = this.ctx.attr("maxlength");
this.bind(callback);
}
function isNumber(keyCode) {
if ((keyCode >=65 && keyCode <=90 ) || (keyCode<48 || keyCode>57) && (keyCode<96 || keyCode>105) || (e.target.value.length >= maxLength)) {
return false;
}
return true;
}
//ctrl + c, ctrl + v ......... ............ ......... ............
NumericInput.prototype.bind = function (callback) {
// var maxLength = this.maxLength;
this.ctx.keydown(function (e) {
var keyCode = e.keyCode;
if (keyCode==46 || keyCode==8 || keyCode==9 || keyCode==27 || (keyCode==65 && e.ctrlKey===true) || (keyCode==67 && e.ctrlKey===true) || (keyCode==86 && e.ctrlKey===true) || (keyCode>=35 && keyCode<=39)) {
return;
}
if ((keyCode >=65 && keyCode <=90 ) || (keyCode<48 || keyCode>57) && (keyCode<96 || keyCode>105)) {
e.preventDefault();
}
});
this.ctx.keyup(function (e) {
callback(e);
});
this.ctx.keypress(function (e) {
callback(e);
});
};
Ui.numerics = function (objs, callback) {
for (var i=0 ; i<objs.length ; i++) {
new NumericInput(objs[i], callback);
}
};
return Ui;
}(jQuery));






: 