Skip to content
Permalink
Browse files

[101] Implemented 3D Model Viewer. Read 3DViewer_info.txt for help.

  • Loading branch information...
Shadez committed Mar 3, 2010
1 parent be986ac commit 71586624ea628e3cc4052698612f16aa1b4041f2
@@ -0,0 +1,37 @@
Attention!
Currently 3D Viewer is not completed full - there's no animations, saving character poses
and some other features.

For correctly work, you need to download an archive with textures (rather large file - 198 MB) and configure the config file:
includes/classes/configuration.php:
$ArmoryConfig['settings']['modelserver'] = '';
in this parameter must specify the complete URL-address to the root folder of the Armory
(eg, http://armory.my-super-wow-server.com or http://my-super-wow-server.com/armory) WITHOUT slash at the end of the address.

'models' folder from the archive should be placed in the root of the site. The unpacked file is approximately 420 megabytes.

If you have some troubles, report on forum:
http://getmangos.com/community/showthread.php?12096-World-of-Warcraft-Armory

You can find textures archive on filekeeper.org (when it will be uploaded on FTP server):
http://filekeeper.org/download/browser.php?path=shadez1%2Fwowarmory/

-----------------------

Внимание!
На данный момент 3D Viewer не завершен полностью - отсутствует проигрывание анимаций, сохранение позы персонажа
и некоторые другие возможности.

Для корректной работы необходимо скачать архив с текстурами (архив довольно большой - 198 мегабайт) и настроить конфиг-файл:
includes/classes/configuration.php:
$ArmoryConfig['settings']['modelserver'] = '';
в этом параметре необходимо указать ПОЛНЫЙ URL-адрес до корневой папки Оружейной
(например, http://armory.my-super-wow-server.com или http://my-super-wow-server.com/armory) БЕЗ слэша в конце адреса.

Папку 'models' из архива необходимо поместить в корень сайта. Распакованные файлы занимают примерно 420 мегабайт.

Если у вас возникли какие-либо затруднения, пишите на форум:
http://getmangos.com/community/showthread.php?12096-World-of-Warcraft-Armory

Архив с текстурами можно найти на filekeeper.org (как только будет загружен на ФТП сервер):
http://filekeeper.org/download/browser.php?path=shadez1%2Fwowarmory/
@@ -21,7 +21,7 @@ INSTALLATION STEPS:
8. Run tools/build_loot_tables.php to generate bosses lootIds for search engine. Read tools/build_loot_tables_README.txt for more info.
If you using YTDB database, you can miss this step - there are already stored data in armory DB for this database.
9. Update your armory database with sql/armory_instance_data.sql - this is data for loot that stored in chests (gameobjects).

10. For 3D Viewer installation info read 3DViewer_info.txt
========================
Как установить Оружейную
========================
@@ -44,4 +44,5 @@ INSTALLATION STEPS:
7. Если в папке 'sql/updates' присутствуют обновления для базы (ревизии 82 и выше), вам будет необходимо так же залить их базу.
8. Запустите tools/build_loot_tables.php для генерации lootid боссов (необходимо для работы поискового движка). Подробнее - в файле tools/build_loot_tables_README.txt
Если ваша база - YTDB, то этот скрипт можно не выполнять, в базе уже имеются данные для этой базы.
9. Обновите базу файлом sql/armory_instance_data.sql - данные для добычи, которая находится в сундуках (игровые объекты).
9. Обновите базу файлом sql/armory_instance_data.sql - данные для добычи, которая находится в сундуках (игровые объекты).
10. Как установить и настроить 3D просмотрщик читайте в файле 3DViewer_info.txt
@@ -152,7 +152,7 @@ function demo3dCharacter(file,charName,attr)
}
if(attr){ for (var i in attr){ flashvars[i] = attr[i]; } }
swfobject.embedSWF(modelserver+"/models/flash/ModelViewer3.swf", "ModelViewer3", "100%", "100%", "9.0.0", modelserver+"/models/flash/expressInstall.swf", flashvars, params, attributes);
$(document).ready(function () { if(!bindMouseActions) loadScript("/_js/character/charactermodel.js"); bindMouseActions() });
$(document).ready(function () { if(!bindMouseActions) loadScript("_js/character/charactermodel.js"); bindMouseActions() });
}


@@ -749,7 +749,7 @@ function getTipHTML(itemID, itemWithTip, mouseEvent)

//get the "pretty-html" for the tooltip
if(toolVault[itemID] == null)
{
{
//set loading text
setTipText(tLoading+"...");
setToolTipPosition(itemWithTip,mouseEvent);
@@ -19,7 +19,7 @@ function bindMouseActions(){
RightClick.init("ModelViewer3","center_target");
$("#center_target").bind("mousedown",function(e){ tipsEnabled = false });
if(!mouseActionsInit){
$(document).bind("mouseup",function(e){ tipsEnabled = true;
$(window).bind("mouseup",function(e){ tipsEnabled = true;
if(e.button == 0){ try{document.getElementById("ModelViewer3").leftClickRelease(); } catch(err){} }
if(e.button == 2){ try{document.getElementById("ModelViewer3").rightClickRelease();} catch(err){} } });
$(window).unload( function(){ try{ document.getElementById("ModelViewer3").stopall(); } catch(err){} });
@@ -114,7 +114,7 @@ var RightClick = {
}
},
/* Main call to Flash External Interface */
call: function() { if(Browser.opera) return;
call: function() { if(Browser.opera || (Browser.mac && Browser.firefox)) return;
try{document.getElementById(this.FlashObjectID).rightClick();}
catch(err){}
}
@@ -0,0 +1,267 @@
var Browser = {
a : navigator.userAgent.toLowerCase()
}
Browser = {
ie : /*@cc_on true || @*/ false,
ie6 : Browser.a.indexOf('msie 6') != -1,
ie7 : Browser.a.indexOf('msie 7') != -1,
opera : !!window.opera,
safari : Browser.a.indexOf('safari') != -1,
safari3 : Browser.a.indexOf('applewebkit/5') != -1,
mac : Browser.a.indexOf('mac') != -1
}
function $(e) {
if(typeof e == 'string')
return document.getElementById(e);
return e;
}
function createElement(name, attrs, doc, xmlns) {
var doc = doc ? doc : document;
var elm;
if(doc.createElementNS)
elm = doc.createElementNS(xmlns ? xmlns : "http://www.w3.org/1999/xhtml", name);
else
elm = doc.createElement(name);
if(attrs)
for(attr in attrs)
elm.setAttribute(attr, attrs[attr]);
return elm;
}
function setDisplay(e, display) {
$(e).style.display = display;
}
function hide(e) {
setDisplay(e, 'none');
}
function show(e) {
setDisplay(e, '');
}
function visible(e) {
return $(e).style.display != 'none';
}
function toggle(e) {
(visible(e) ? hide : show)(e);
}
function visibleInverse(e) {
return $(e).style.display != '';
}
function toggleInverse(e, display) {
setDisplay(e, visibleInverse(e) ? '' : display);
}
function getChildElementsByTagName(e, tagName) {
var nodes = [];
for(var i = 0; i < e.childNodes.length; i++)
if(e.childNodes[i].nodeName.toLowerCase() == tagName)
nodes.push(e.childNodes[i]);
return nodes;
}
function removeChildren(e) {
while(e.firstChild)
e.removeChild(e.firstChild);
}
function addEvent(obj, evType, fn) {
if(obj.addEventListener) {
obj.addEventListener(evType, fn, false);
return true;
} else if(obj.attachEvent)
return obj.attachEvent("on" + evType, fn);
return false;
}

function getFormQueryString(form) {
var pairs = [];
var inputs = form.getElementsByTagName('input');
var textareas = form.getElementsByTagName('textarea');
var selects = form.getElementsByTagName('select');

for(var i = 0, input; input = inputs[i]; i++)
pairs.push(input.name + '=' + encodeURI(input.value));

for(var i = 0, input; input = textareas[i]; i++)
pairs.push(input.name + '=' + encodeURI(input.value));

for(var i = 0, input; input = selects[i]; i++)
for(var j = 0, option; option = input.options[j]; j++)
if(option.selected)
pairs.push(input.name + '=' + encodeURI(option.value));

return pairs.join('&');
}

function getURLParams() {
var map = {};
var entries = document.location.search.substr(1).split('&');
for(var i = 0; i < entries.length; i++) {
var entry = entries[i].split('=', 2);
if(!map[entry[0]])
map[entry[0]] = [];
map[entry[0]].push(entry.length == 2 ? decodeURIComponent(entry[1]) : null);
}
return map;
}

function createURLSearchString(map) {
var search = '';
for(field in map)
if(!Object.prototype[field]) {
var array = map[field];
for(var i = 0; i < array.length; i++) {
if(search != '')
search += '&';
search += field;
if(array[i] != null)
search += '=' + array[i];
}
}
if(search != '')
search = '?' + search;
return search;
}

function setURLParam(parameter, value) {
var url = document.location.protocol + '//' + document.location.host + document.location.pathname;
var params = getURLParams();
params[parameter] = [value];
url += createURLSearchString(params);
url += document.location.hash;
return url;
}

function addStylesheet(href, media) {
document.getElementsByTagName("head")[0].appendChild(createElement('link', {
'rel': 'stylesheet',
'type': 'text/css',
'media': media ? media : 'screen, projection',
'href': href
}));
}

function createObject(type, data, width, height, params, doc, fallback) {
var obj = createElement('object', {
'type': type,
'data': data,
'width': width,
'height': height
}, doc);
if(params)
for(var i = 0, pair; pair = params[i]; i++)
obj.appendChild(createElement("param", {
'name': pair[0],
'value': pair[1]
}, doc));
if(fallback)
obj.appendChild(fallback);
return obj;
}

function setFlash(target, data, width, height, params, fallbackMsg) { // avoids IE Eolas patent UI workarounds
// IE ignores objects created with DOM. Serialize & use innerHTML
var doc = Browser.ie ? new ActiveXObject('Microsoft.XMLDOM') : document;
var obj = createObject('application/x-shockwave-flash', data, width, height, params, doc,
doc.createTextNode(fallbackMsg));
var targetNode = $(target);
if(Browser.ie)
targetNode.innerHTML = obj.xml;
else {
removeChildren(targetNode);
targetNode.appendChild(obj);
}
}

function selectLanguage(lang) {
window.location = HTTP.setURLParam('locale', lang);
}

var HTTP = {
URL_SPACE_REGEXP : /%20/g,
getURLParams : function(url) {
var map = {};
if(url) {
var queryStart = url.indexOf('?');
var hashStart = url.indexOf('#');
if(queryStart != -1) {
if(hashStart != -1)
url = url.substring(queryStart + 1, hashStart);
else
url = url.substr(queryStart + 1);
} else
return map;
} else
url = window.location.search.substr(1);
var entries = url.split('&');
for(var i = 0; i < entries.length; i++) {
var entry = entries[i].split('=', 2);
if(!map[entry[0]])
map[entry[0]] = [];
map[entry[0]].push(entry.length == 2 ? decodeURIComponent(entry[1]) : null);
}
return map;
},
setURLParam : function(parameter, value, url) {
var hash = '';
var path;
if(url) {
var queryStart = url.indexOf('?');
var hashStart = url.indexOf('#');
if(queryStart != -1)
path = url.substring(0, queryStart);
else if(hashStart != -1)
path = url.substring(0, hashStart);
else
path = url;
if(hashStart != -1)
hash = url.substr(hashStart);
} else {
url = false;
path = window.location.pathname;
hash = window.location.hash;
}
var params = HTTP.getURLParams(url);
params[parameter] = [value];
return path + HTTP._createQueryString(params) + hash;
},
encodeForm : function(form, post) {
var pairs = [];
var inputs = form.getElementsByTagName('input');
var textareas = form.getElementsByTagName('textarea');
var selects = form.getElementsByTagName('select');

for(var i = 0, input; input = inputs[i]; i++)
if(!input.disabled && input.name && ((input.type != 'radio' && input.type != 'checkbox') || input.checked))
pairs.push(HTTP._formUrlEncode(input.name, post) + '=' + HTTP._formUrlEncode(input.value, post));

for(var i = 0, input; input = textareas[i]; i++)
if(!input.disabled && input.name)
pairs.push(HTTP._formUrlEncode(input.name, post) + '=' + HTTP._formUrlEncode(input.value, post));

for(var i = 0, input; input = selects[i]; i++)
if(!input.disabled && input.name)
for(var j = 0, option; option = input.options[j]; j++)
if(option.selected)
pairs.push(HTTP._formUrlEncode(input.name, post) + '=' + HTTP._formUrlEncode(option.value, post));

return pairs.join('&');
},
_createQueryString : function(map) {
var search = '';
for(field in map)
if(!Object.prototype[field]) {
var array = map[field];
for(var i = 0; i < array.length; i++) {
if(search != '')
search += '&';
search += field;
if(array[i] != null)
search += '=' + array[i];
}
}
if(search != '')
search = '?' + search;
return search;
},
_formUrlEncode : function(val, post) {
if(post)
return encodeURIComponent(val).replace(HTTP.URL_SPACE_REGEXP, '+');
return encodeURIComponent(val);
}
}

0 comments on commit 7158662

Please sign in to comment.
You can’t perform that action at this time.