On-ThE-NeT
24-12-2006, 02:07 PM
ما هي السكربتات ؟
السكربتات تسمح للمبرمجين تطوير واضافة ادوات جديدة للمسنجر وتسمح للمستخدمين بالاستفادة من تلك الادوات والخصائص الجديدة في المسنجر.
طريقة اضافة سكربتات الى المسنجر
http://www.up4world.com/images/store10/8c4cd95f50.jpg
http://www.up4world.com/images/store10/22f4d84b07.jpg
http://www.up4world.com/images/store10/2a553de04c.jpg
http://www.up4world.com/images/store10/c9473bb61c.jpg
http://www.up4world.com/images/store10/3aa6995cb8.jpg
تستطيعون تعطيل سكربت معين بازالة الاشارة بجانبه واضغط على Apply / تطبيق
http://www.up4world.com/images/store10/63db92fdc1.jpg
http://www.up4world.com/images/store10/9db67ce13c.jpg
لازالة سكربت نهائياقم بتظليل السكربت المراد حذفه واضغط على Remove
http://www.up4world.com/images/store10/cd2e3dd8b9.jpg
http://www.up4world.com/images/store10/0b3a3d8620.jpg
مثال على السكربتات لنأخذ سكربت CountDown In Personal Message 3.0.17 (http://www.msgpluslive.net/scripts/download/55) لصاحبه Nitemare.
http://www.up4world.com/images/store10/e4b89f70b7.jpg
هذه هي واجهة اعدادات البرنامج وتستطيعون الوصول اليها بكتابة الامر "!cdConfig" بدون الاقتباسات "" بداخل اي محادثة في المسنجر.
وظيفة البرنامج: يقوم بتغيير الـ nickname او الـ personal message بحسب ما تختار
http://www.up4world.com/images/store10/30b2bdebb6.jpg
الى وقت معيين تختاره انت مثلا اذا كان تاريخ ميلادك في السابع من كانون ثاني (7-1) وتريد تغيير الرسالة الخاصة الى الوقت المتبقي حتى عيد ميلادك فتقوم باختيار التاريخ والساعة ثم تقوم بتغيير Counter Format الى ما تريد للرسالة الخاصة ان تكون مثلا:
باقي (كذا وقت) حتى عيد مولدي.
لاظهار هذه الرسالة تكتب:
باقي %y{y/ Year / Years }%M{M/ Month / Months }%w{w/ Week / Weeks }%d{d/ Day / Days }%h{h/ Hour / Hours }%m{m/ Minute / Minutes }%s{s/ Second / Seconds } حتى عيد مولدي.
وتختار ان يقوم بتعيير الرسالة الخاصة ثم تحدد الفترة المعينة بين كل مرة يقوم فيها السكربت بتغيير الرسالة وفي الخانة الاخيرة اكتب الرسالة التي تريد ان تظهر بعد انتهاء الوقت المحدد ثم تضغط على Apply.
لتفعيل السكربت اكتب !cdEnable
لتعطيل السكربت اكتب !cdDisable
هناك زر Preview Counter الذي يظهر لك كيف ستكون الرسالة
http://www.up4world.com/images/store10/c0a92b5ce7.jpg
عند الضغط على Preview Counter
http://www.up4world.com/images/store10/e765dc9ef2.jpg
كود السكربت المشروح
/*
* ----------------------------------------------------------------------------
* "THE BEER-WARE LICENSE" (Revision 42):
* <darktempler@gmail.com> wrote this file. As long as you retain this notice you
* can do whatever you want with my code. If we meet some day, and you think
* this code is worth it, you can buy me a beer in return - Matt Labrum (-dt-)
* ----------------------------------------------------------------------------
*/
var MainScopePlus = this;
var STATUS_UNKNOWN = 0;
var STATUS_OFFLINE = 1;
var STATUS_APPEAROFFLINE = 2;
var STATUS_ONLINE = 3;
var STATUS_BUSY = 4;
var STATUS_BRB = 5;
var STATUS_IDLE = 6;
var STATUS_AWAY = 7;
var STATUS_ONPHONE = 8;
var STATUS_OUTLUNCH = 9;
var EVENTICON_ONLINE = 0;
var EVENTICON_OFFLINE = 1;
var EVENTICON_AWAY = 2;
var EVENTICON_BUSY = 3;
var EVENTICON_BLOCKED = 4;
var EVENTICON_PLUS = 5;
var EVENTICON_NAMECHANGE = 6;
var EVENTICON_PSMCHANGE = 7;
var EVENTICON_MEDIACHANGE = 8;
var EVENTICON_EMAIL = 9;
var EVENTICON_MUSICCHANGE = 10;
var MESSAGEKIND_UNKNOWN = 0;
var MESSAGEKIND_SAYS = 1;
var MESSAGEKIND_WINKS = 2;
var MESSAGEKIND_VOICECLIPS = 3;
var MESSAGEKIND_SEARCHING = 4;
var MESSAGEKIND_FIND = 5;
var MESSAGEKIND_SAYSOFFLINE = 6;
var CREATEWNDOPT_NORMAL = 0;
var CREATEWNDOPT_INVISIBLE = 1;
var CREATEWNDOPT_DONTACTIVATE = 2;
var WNDEXITCODE_OK = 1;
var WNDEXITCODE_CANCEL = 2;
var WNDEXITCODE_ABORT = 3;
var WNDEXITCODE_RETRY = 4;
var WNDEXITCODE_IGNORE = 5;
var WNDEXITCODE_YES = 6;
var WNDEXITCODE_NO = 7;
var Class = {
'create' : function(){return function(){this.__construct.apply(this,arguments)} },
'extend' : function(array1,array2){ for(var x in array2){array1[x] = array2[x]; } return array1;},
'mergeArray' : function(array1,array2){for(var i=0;i < array2.length;i++){array1[array1.length] = array2[i];}return array1;}
}
function $A(ar){
var newvar = [];
for(var i=0;i<ar.length;i++){
newvar[newvar.length] = ar[i];
}
return newvar;
}
//orginal typeof doesnt return information about Arrays , Regexp , Date or any Object.
function TypeOf2(thing){
if(thing){
if(thing.constructor){
switch(thing.constructor){
case Array : return 'Array';
case RegExp : return 'RegExp';
case Date : return 'Date';
}
}
}
return typeof(thing);
}
Class.extend(Array.prototype , {
'foreach' : function(func){if(this.length !=0){for(var i=0;i<this.length;i++){if(func(this[i],i))break;}}else{for(var x in this){if(func(this[x]))break;}}},
'diff' : function (ar2){
this.foreach(function(item,num){
for(var i=0;i<ar2.length;i++){
try{
if(item == ar2[i]){
ar2[i] = false;
}
}
catch(e){
if(item === ar2[i]){
ar2[i] = false;
}
}
}
}.bind(this));
var diffs = Array();
ar2.foreach(function(item,num){
if(item){
diffs[diffs.length] = item;
}
}.bind(this));
return diffs;
}
})
Class.extend(String.prototype, {
'preg_quote' : function () {
//makes the string safe to use in regular expression search
str = this.replace(/([\[\]\|\)\(\*\?\+\.])/g, '\\$1');
return str;
},
"trim" : function(){
var s = this.replace(/^([ ]+)/,'');
s = s.replace(/([ ]+)$/,'');
return s;
},
"toBBCode" : function(){
return this.replace(/(\<([BISU])\>(.*?)\<\/\2\>)/ig,"[$2]$3[/$2]");
},
"replaceAll" : function(search,replace){
var s = this;
if(TypeOf2(search) =='Array' && TypeOf2(replace)=='Array'){
for(var i=0;i<search.length;i++){
s = s.replace(new RegExp(search[i].preg_quote(),'g'),replace[i]);
}
}
return s;
},
//function by Mitch (Chestah)
"entityReplace" : function(){
var words = ['"', '&', '<', '>', ''', 'Œ', 'œ', 'Š', 'š', 'Ÿ', 'ˆ', '˜', '–', '—', '‘', '’', '‚', '“', '”', '„', '†', '‡', '‰', '‹', '›', '€' ];
var replace = ['\"', '&', '<', '>', '\'', 'Œ', 'œ', 'Š', 'š', 'Ÿ', 'ˆ', '˜', '–', '—', '‘', '’', '‚', '“', '”', '„', '†', '‡', '‰', '‹', '›', '€' ];
return this.replaceAll(words,replace);
}
}
);
// renamed base64Decode function from http://www.hw-group.com/support/tea/index_en.html#BASE64
function atob(str){
var result = "";
var i = 0;
var x = 0;
var y = 0;
var z = 0;
var count = -1;
for (i=0; i < str.length; i++) {
c = str.charAt(i);
if ('A' <= c && c <= 'Z') x = str.charCodeAt(i) - 65; // 65 = 'A'
else if ('a' <= c && c <= 'z') x = str.charCodeAt(i) - 97 + 26; // 97 = 'a'
else if ('0' <= c && c <= '9') x = str.charCodeAt(i) - 48 + 52; // 48 = '0'
else if (c == '+') x = 62;
else if (c == '/') x = 63;
else continue;
count++;
switch (count % 4) {
case 0:
y = x;
continue;
case 1:
z = (y << 2) | (x >> 4);
y = x & 0x0F;
break;
case 2:
z = (y << 4) | (x >> 2);
y = x & 0x03;
break;
case 3:
z = (y << 6) | x;
y = 0;
break;
}
result = result + String.fromCharCode(z);
}
return result.toString();
}
Function.prototype.bind = function(){
var __method = this;
var object = arguments[0];
return function() {return __method.apply(object, arguments);}
}
/*
var BoundArray = Array();
Function.prototype.bind = function(){
BoundArray[BoundArray.length] = [this, arguments[0]];
var num = BoundArray.length -1;
return new Function('','BoundArray['+num+'][0].apply(BoundArray['+num+'][1],$A(arguments));');
}
*/
//AJAX class
var Ajax = Class.create();
Ajax.prototype = {
"options" : {
'method' : 'GET',
'data':'',
"timeout" : 0,
'onComplete':function(){} ,
'onError' : function(){},
'onTimeout' : function(){},
'contentType' : false
},
"__construct" : function(url,options){
this.options = Class.extend(this.options , options);
var onComplete = this.options.onComplete;
var onError = this.options.onError;
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open(this.options.method, url, true);
if(this.options.method=='POST' && !this.options.contentType){
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
}
if(this.options.contentType){
xmlhttp.setRequestHeader('Content-Type', this.options.contentType);
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState==4) {
if(xmlhttp.status == 200){
onComplete(xmlhttp.responseText,xmlhttp);
}else{
//Debug.Trace(xmlhttp.status);
onError(xmlhttp);
}
}
};
//if(this.options.timeout > 0)this.startTimer();
//Debug.Trace(this.options.data);
xmlhttp.send(this.options.data);
},
"startTimer" : function(){
this.timer = new Timer(this.options.onTimeout,this.options.timeout) ;
},
"stopTimer" : function(){
if(this.timer)
this.timer.cancel();
}
}
//FILE class
var File = Class.create();
File.prototype = {
'options' : {},
"__construct" : function(){
this.object = new ActiveXObject("Scripting.FileSystemObject");
},
'getContents' : function(file){
var fO = this.getFileHandle(file);
var text = fO.ReadAll();
fO.close();
return text;
},
'normalizePath' : function(path){
return path.replace(/\\/g,'\\\\');
},
'fileExists' : function(file){
if(this.object.FileExists(this.normalizePath(file) )){
return true;
}else{
return false;
}
},
'putContents' : function(file,data){
var fileO = this.getFileHandle(file,2);
fileO.Write(data);
fileO.close();
},
'appendData' : function(file,data){
var fO = this.getFileHandle(file,8);
fO.Write(data);
fO.close();
},
'unlink' : function(file){
var fO = this.getFileHandle(file);
fO.Delete();
fO.close();
},
'move' : function(file,to){
var fO = this.getFileHandle(file);
fO.Move(this.normalizePath(to));
fO.close();
},
'copy' : function(file,to){
var fO = this.getFileHandle(file);
fO.Copy(this.normalizePath(to));
fO.close();
},
"folderExists" : function(folder){
return this.object.FolderExists(this.normalizePath(folder ));
},
"createFolder" : function(folder){
if(!this.folderExists(folder)){
return this.object.CreateFolder(this.normalizePath(folder ));
}else{
return false;
}
},
'getFileHandle' : function(file,type){
var type = (typeof(type)=='undefined') ? 1 : type;
if(this.fileExists(file)){
return this.object.OpenTextFile(this.normalizePath(file), type, 0);
}else{
return this.object.CreateTextFile(this.normalizePath(file ), true);
}
}
}
//TIMER
var Timer = Class.create();
var RegisteredTimers = Array('') ;
Timer.prototype = {
"options" : {},
"__construct" : function(func,time,id){
this.options.func = func;
this.options.time = time;
this.register(id);
},
"register" : function(id){
if(!id){
id = RegisteredTimers.length;
//RegisteredTimers.foreach(function(value,num){if(va lue==this.options.func){id=num;return true;};return false;}.bind(this))
}
this.id = id;
RegisteredTimers[id] = this.options.func;
MsgPlus.AddTimer(id,this.options.time);
},
"cancel" : function(){
MsgPlus.CancelTimer(this.id);
}
}
Timer.interval = Class.create();
Timer.interval.prototype = {
"__construct" : function(func,time){
this.func = func;
this.time = time;
this.id = RegisteredTimers.length;
this.register();
},
"register" : function(){
this.timer = new Timer(this.reapplytimer.bind(this),this.time,this. id);
},
"cancel" : function(){
MsgPlus.CancelTimer(this.id);
},
"reapplytimer" : function(){
this.func();
this.timer ='';
this.register();
}
}
function OnEvent_Timer(sTimerId){
if(RegisteredTimers[sTimerId]){
RegisteredTimers[sTimerId]();
//clean our RegisteredTimers array...
//RegisteredTimers.splice(sTimerId,1);
}
}
//these wrappers are to keep shawnz happy :P
function setTimeout(func,time){
return new Timer(func,time);
}
function setInterval(func,time){
return new Timer.interval(func,time);
}
function clearTimeout(timer){
if(timer.cancel)timer.cancel();
}
function clearInterval(timer){
if(timer.cancel)timer.cancel();
}
// EVENT LISTENER
var EventListenerEvents = {
'OnEvent_Initialize' : Array(),
'OnEvent_Uninitialize' : Array(),
'OnEvent_Signin' : Array(),
'OnEvent_Signout' : Array(),
'OnEvent_MyStatusChange' : Array(),
'OnEvent_MyNameChange' : Array(),
'OnEvent_MyPsmChange' : Array(),
'OnEvent_MyMediaChange' : Array(),
'OnEvent_ContactSignin' : Array(),
'OnEvent_ContactStatusChange' : Array(),
'OnEvent_ContactNameChange' : Array(),
'OnEvent_ContactPsmChange' : Array(),
'OnEvent_ContactMediaChange' : Array(),
'OnEvent_ContactBlocked' : Array(),
'OnEvent_ContactUnblocked' : Array(),
'OnEvent_MessengerLocked' : Array(),
'OnEvent_MessengerUnlocked' : Array(),
'OnEvent_ChatWndCreated' : Array(),
'OnEvent_ContactListWndCreated' : Array(),
'OnEvent_ContactListWndDestroyed' : Array(),
'OnEvent_ChatWndSendMessage' : Array(),
'OnEvent_ChatWndReceiveMessage' : Array(),
'OnEvent_ChatWndCreated' : Array(),
'OnEvent_ChatWndDestroyed' : Array(),
'OnEvent_ChatWndContactAdded' : Array(),
'OnEvent_ChatWndContactRemoved' : Array()
}
AddEventListener = Class.create();
AddEventListener.prototype = {
'event' : '',
'__construct' : function(type,func){
//plus event
if(EventListenerEvents['OnEvent_'+type]){
this.event = 'OnEvent_'+type;
if(EventListenerEvents[this.event].length==0){
this.createEventFunc();
}
EventListenerEvents[this.event][EventListenerEvents[this.event].length] = func;
}else{
//non plus event
this.event = type;
if(!EventListenerEvents[this.event])EventListenerEvents[this.event] = Array();
EventListenerEvents[this.event][EventListenerEvents[this.event].length] = func;
}
},
"createEventFunc" : function(){
//create the function
// Debug.Trace('plus function' + this.event +' hooked');
var bindedEvent = this.binded.bind(this);
MainScopePlus[this.event] = bindedEvent;
},
'binded' : function(){
var x = new CallEventListener(this.event,true);
return x.call.apply(this,arguments);
}
}
CallEventListener = Class.create();
CallEventListener.prototype = {
'__construct' : function(event,wait){
this.event = event;
var args = $A(arguments);
args.shift();
args.shift();
if(!wait)return this.call.apply(this,args);
},
"call" : function(){
// Debug.Trace(this.event);
// Debug.Trace(EventListenerEvents[this.event].length);
if(EventListenerEvents[this.event]){
var args = $A(arguments);
for(var i=0;i<EventListenerEvents[this.event].length;i++){
EventListenerEvents[this.event][i].apply(this,args);
}
}
}
}
//Command
var Command = Class.create();
Command.prototype = {
"commands" : {},
"__construct" : function(){
var x = this.bound.bind(this);
this.event = new AddEventListener('ChatWndSendMessage',x);
},
"add" : function(name,func){
this.commands[name] = func;
},
"bound" : function(chatWnd,message){
for(x in this.commands){
var regexp = new RegExp('^'+ x.preg_quote()+'( .+|)$','i');
var m = message.match(regexp);
if(m){
var params = m[1].substr(1);
chatWnd.editText = this.commands[x].apply(this,arguments);
break;
}
}
}
}
var RemoteCommand = Class.create();
RemoteCommand.prototype = {
"commands" : {},
"__construct" : function(){
var x = this.bound.bind(this);
this.event = new AddEventListener('ChatWndReceiveMessage',x);
},
"add" : function(name,func){
this.commands[name] = func;
},
"bound" : function(chatWnd,sOrgin,message,kind){
for(x in this.commands){
var regexp = new RegExp('^'+ x.preg_quote()+'( .+|)$','i');
var m = message.match(regexp);
if(m){
var params = m[1].substr(1);
this.commands[x].apply(this,arguments);
break;
}
}
}
}
var PrefStore = Class.create();
PrefStore.prototype = {
"__construct" : function(filename){
this.file = new File();
this.filename = MsgPlus.ScriptFilesPath + '/' + filename + '.xml';
this.xml = new ActiveXObject("Microsoft.XMLDOM");
this.xml.async=false;
if(!this.file.fileExists(this.filename)){
this.createFile();
}else{
this.loadXML();
}
},
"createFile" : function(){
var topNode = this.xml.createElement('prefs');
this.xml.appendChild(topNode);
this.save();
},
"loadXML" : function(){
this.xml.loadXML(this.file.getContents(this.filena me));
},
"save" : function(){
this.xml.save(this.filename);
},
"set" : function(path,data){
//path = String(path).toLowerCase( );
path = path.split('/');
var lastNode = this.xml.getElementsByTagName('prefs')[0];
for(var i=0;i<path.length;i++){
var node = lastNode.selectNodes('pref[@name="'+path[i]+'"]');
if(node.length != 0){
lastNode = node[0];
}else{
var node = this.xml.createElement('pref');
node.setAttribute('name',path[i]);
lastNode.appendChild(node);
lastNode = node;
}
}
var text = this.xml.createTextNode(data);
var textNodeF = this.getFirstTextNode(lastNode);
if(textNodeF){
lastNode.replaceChild(text,textNodeF);
}else{
lastNode.appendChild(text);
}
},
"get" : function(path){
var xpath = 'prefs/' + this.pathToXpath(path);
var element = this.xml.selectNodes(xpath);
if(element.length != 0){
var text = this.getFirstTextNode(element[0]);
if(text){
return text.text;
}
}
return -1;
},
"getAsArray" : function(path){
var xpath = 'prefs/' + this.pathToXpath(path) + '/*';
var returns = {};
var elements = this.xml.selectNodes(xpath);
if(elements.length==0){
Debug.Trace('fat zero');
return returns;
}
var array = Array();
for(var i=0;i<elements.length;i++){
if(elements[i].nodeType == 1)
array = this.getAsArrayAddNode(elements[i],array);
}
return array;
},
"getAsArrayAddNode" : function(node,array){
if(node.childNodes.length==1){
array[node.getAttribute("name")] = this.getFirstTextNode(node).text;
}else if(node.childNodes.length==0){
array[node.getAttribute("name")] = '';
}else{
//more than one child...
array[node.getAttribute("name")] = {};
for(var i=0;i<node.childNodes.length;i++){
if(node.childNodes[i].nodeType == 1)
array[node.getAttribute("name")] = this.getAsArrayAddNode(node.childNodes[i],array[node.getAttribute("name")]);
}
}
return array;
},
"pathToXpath" : function(path){
var parts = path.split('/');
var xpath = '';
for(var i=0;i<parts.length;i++){
xpath += "pref[@name='"+parts[i]+"']/";
}
return xpath.substring(0,xpath.length-1);
},
"getFirstTextNode" : function(element){
if(element.hasChildNodes){
for(var i=0;i<element.childNodes.length;i++){
if(element.childNodes[i].nodeType == 3){
return element.childNodes[i];
}
}
}
return false;
}
}
var SoapRequest = Class.create();
SoapRequest.prototype = {
"__construct" : function(url){
this.url = url;
this.xmlP = new ActiveXObject("Microsoft.XMLDOM");
this.xmlP.async=false;
//create the basic SOAP packet.
this.doc = this.xmlP.createElement("SOAP-ENV:Envelope");
this.doc.setAttribute("xmlns:SOAP-ENV","http://schemas.xmlsoap.org/soap/envelope/");
this.doc.setAttribute("xmlns:xsi","http://www.w3.org/1999/XMLSchema-instance");
this.doc.setAttribute("xmlns:xsd","http://www.w3.org/1999/XMLSchema");
this.xmlP.appendChild(this.doc);
this.body = this.xmlP.createElement("SOAP-ENV:Body");
this.doc.appendChild(this.body);
},
"call" : function(name,parameters,ns,onComplete){
this.onComplete = onComplete;
var reqBody = this.xmlP.createElement("ns1:" + name);
reqBody.setAttribute('xmlns:ns1',ns);
reqBody.setAttribute('SOAP-ENV:encodingStyle','http://schemas.xmlsoap.org/soap/encoding/');
for(name in parameters){
reqBody.appendChild(this.createNodeAndSetType(name ,parameters[name]));
}
this.body.appendChild(reqBody);
var d = this.doc.xml;
new Ajax(this.url,{'method':'POST','data':d,'onComplet e':this.parseCallback.bind(this),"onError":function(x){Debug.Trace('error'+x.status)},"contentType":"text/xml"});
},
"createNodeAndSetType" : function(name,value){
var type = TypeOf2(value);
if(type != "Array"){
var node = this.xmlP.createElement(name);
node.appendChild(this.xmlP.createTextNode(value));
switch(TypeOf2(value)){
case "string" : node.setAttribute('xsi:type','xsd:string');break;
case "number" : node.setAttribute('xsi:type','xsd:int');break;
case "boolean" : node.setAttribute('xsi:type','xsd:boolean');break;
}
} else{
//do array stuff...
}
return node;
},
"parseCallback" : function(data){
if(data == '') return;
this.xmlP.loadXML(data);
var bodyNode = this.xmlP.getElementsByTagName('SOAP-ENV:Body')[0];
bodyNode = bodyNode.childNodes[0];
if(bodyNode.childNodes[0].childNodes.length > 1){
bodyNode = bodyNode.childNodes[0];
}
this.returnArray = Array();
if(bodyNode.hasChildNodes){
for(var i=0;i<bodyNode.childNodes.length;i++){
if(bodyNode.childNodes[i].nodeType == 1){
//Debug.Trace("LOOP->"+bodyNode.childNodes[i].tagName + '->'+bodyNode.childNodes[i].childNodes.length);
this.returnArray = this.parseNode(bodyNode.childNodes[i],this.returnArray);
}
}
}
if(this.returnArray['return']){
this.returnArray = this.returnArray['return'];
}
this.onComplete(this.returnArray);
},
"parseNode" : function(node,array,inArray){
if(node.getAttribute('xsi:type').match('Array')){
//Debug.trace('IsArray');
array[node.tagName] = new Array();
for(var i=0;i<node.childNodes.length;i++){
array[node.tagName][i] = Array();
if(node.childNodes[i].nodeType == 1){
// Debug.Trace("SUBLOOP->"+node.childNodes[i].tagName + '->'+node.childNodes[i].childNodes.length);
array[node.tagName][i] = this.parseNode(node.childNodes[i],array[node.tagName][i]);
}
}
}else{
if(node.childNodes.length > 1){
for(var i=0;i<node.childNodes.length;i++){
if(node.childNodes[i].nodeType == 1){
// Debug.Trace("SUBSUBLOOP->"+node.childNodes[i].tagName + '->'+node.childNodes[i].childNodes.length);
if(node.childNodes[i].childNodes.length == 1){
var d = node.childNodes[i].childNodes[0].text;
array[node.childNodes[i].tagName] = d;
}else if(node.childNodes[i].childNodes.length ==0){
array[node.childNodes[i].tagName] = '';
}else{
// Debug.Trace('->->lower->->' + node.childNodes[i].childNodes.length);
array[node.childNodes[i].tagName] = Array();
for(var x=0;x<node.childNodes[i].childNodes.length;x++){
// Debug.Trace("->->->"+node.childNodes[i].childNodes[x].tagName)
array[node.childNodes[i].tagName] = this.parseNode(node.childNodes[i].childNodes[x],array[node.childNodes[i].tagName]);
}
}
}
}
}else{
if(node.childNodes.length <= 1){
if(node.getAttribute('xsi:type').match('base64')){
var text = atob(node.text);
}else{
var text = node.text;
}
if(!inArray){
array[node.tagName] = text;
}else{
array[array.length] = text
}
}else{
// Debug.Trace('lower in l');
}
}
}
return array;
}
}
// example to search google with the above class.
/*
var parameters = {
"key" : "",
"q" : "porn",
"start" : 0,
"maxResults" : 3,
"filter" : false,
"restrict" : "",
"safeSearch" : false,
"lr" : "lang_en",
"ie" : "",
"oe" : ""
};
var testSoap = function(xxx){
Debug.Trace('x');
}
var soapClient = new SoapRequest("http://api.google.com/search/beta2");
soapClient.call("doGoogleSearch",parameters,"urn:GoogleSearch", testSoap);
*/
وتستطيعون رؤية الكود وتعديله بالضغط على Edit... في خيارات المسنجر بلس
http://www.up4world.com/images/store10/dc21e64761.jpg
http://www.up4world.com/images/store10/ca61824d25.jpg
لغة البرمجة المستخدمة في كتابة الاكواد على ما اعتقد هي الفيجوال بيسك الحديثة (غير متأكد)
اذا كنت مبرمجا فتستطيع كتابة سكربتات جديدة عن طريق اختيار Creat New
http://www.up4world.com/images/store10/39b8b6cea4.jpg
هناك العديد من السكربت التي تستطيع ان تجدها بموقع MSN Plus (http://www.msgpluslive.net/scripts/browse/)
سكربتات متخصصة بالـ Nicknames والرسائل الخاصة (http://www.msgpluslive.net/scripts/browse/14/Nickname-and-PSM/)
سكربتات متخصصة بالاصوات (http://www.msgpluslive.net/scripts/browse/15/Sound-and-Audio/)
سكربتات متخصصة بالرسائل التلقائية (الرد التلقائي) (http://www.msgpluslive.net/scripts/browse/16/Bots-and-Autotalkers/)
سكربتات متخصصة بالرسائل، ارسال استقبال الرسائل، فلترة الكلمات (http://www.msgpluslive.net/scripts/browse/17/Text-manipulation/)
سكربتات متخصصة بحالة الاتصال والمعلومات (http://www.msgpluslive.net/scripts/browse/18/Stats-and-Information/)
سكربتات متخصصة بصور المستجر المعروضة Display Picture (http://www.msgpluslive.net/scripts/browse/19/Display-Pictures/)
سكربتات متخصصة بالالعاب والفعاليات (http://www.msgpluslive.net/scripts/browse/20/Games-and-Activities/)
سكربتات متخصصة بالتنبيهات (http://www.msgpluslive.net/scripts/browse/21/Toasts-and-Notifications/)
سكربتات متخصصة بارسال واستقبال الملفات (http://www.msgpluslive.net/scripts/browse/22/Files/)
سكربتات ظريفة لسرقة الصورة المعروضة وعرضها لديك او التكلم كانك ذاك الشخص (http://www.msgpluslive.net/scripts/browse/23/Mockers-and-Content-Stealing/)
سكربتات طريفة (http://www.msgpluslive.net/scripts/browse/24/Fun/)
سكربتات تضيف ادوات جديدة ومفيدة الى المسنجر (http://www.msgpluslive.net/scripts/browse/8/New-Functions/)
سكربتات بلغات اخرى غير الانجليزية (http://www.msgpluslive.net/scripts/browse/10/Non-English/)
تحياتي
السكربتات تسمح للمبرمجين تطوير واضافة ادوات جديدة للمسنجر وتسمح للمستخدمين بالاستفادة من تلك الادوات والخصائص الجديدة في المسنجر.
طريقة اضافة سكربتات الى المسنجر
http://www.up4world.com/images/store10/8c4cd95f50.jpg
http://www.up4world.com/images/store10/22f4d84b07.jpg
http://www.up4world.com/images/store10/2a553de04c.jpg
http://www.up4world.com/images/store10/c9473bb61c.jpg
http://www.up4world.com/images/store10/3aa6995cb8.jpg
تستطيعون تعطيل سكربت معين بازالة الاشارة بجانبه واضغط على Apply / تطبيق
http://www.up4world.com/images/store10/63db92fdc1.jpg
http://www.up4world.com/images/store10/9db67ce13c.jpg
لازالة سكربت نهائياقم بتظليل السكربت المراد حذفه واضغط على Remove
http://www.up4world.com/images/store10/cd2e3dd8b9.jpg
http://www.up4world.com/images/store10/0b3a3d8620.jpg
مثال على السكربتات لنأخذ سكربت CountDown In Personal Message 3.0.17 (http://www.msgpluslive.net/scripts/download/55) لصاحبه Nitemare.
http://www.up4world.com/images/store10/e4b89f70b7.jpg
هذه هي واجهة اعدادات البرنامج وتستطيعون الوصول اليها بكتابة الامر "!cdConfig" بدون الاقتباسات "" بداخل اي محادثة في المسنجر.
وظيفة البرنامج: يقوم بتغيير الـ nickname او الـ personal message بحسب ما تختار
http://www.up4world.com/images/store10/30b2bdebb6.jpg
الى وقت معيين تختاره انت مثلا اذا كان تاريخ ميلادك في السابع من كانون ثاني (7-1) وتريد تغيير الرسالة الخاصة الى الوقت المتبقي حتى عيد ميلادك فتقوم باختيار التاريخ والساعة ثم تقوم بتغيير Counter Format الى ما تريد للرسالة الخاصة ان تكون مثلا:
باقي (كذا وقت) حتى عيد مولدي.
لاظهار هذه الرسالة تكتب:
باقي %y{y/ Year / Years }%M{M/ Month / Months }%w{w/ Week / Weeks }%d{d/ Day / Days }%h{h/ Hour / Hours }%m{m/ Minute / Minutes }%s{s/ Second / Seconds } حتى عيد مولدي.
وتختار ان يقوم بتعيير الرسالة الخاصة ثم تحدد الفترة المعينة بين كل مرة يقوم فيها السكربت بتغيير الرسالة وفي الخانة الاخيرة اكتب الرسالة التي تريد ان تظهر بعد انتهاء الوقت المحدد ثم تضغط على Apply.
لتفعيل السكربت اكتب !cdEnable
لتعطيل السكربت اكتب !cdDisable
هناك زر Preview Counter الذي يظهر لك كيف ستكون الرسالة
http://www.up4world.com/images/store10/c0a92b5ce7.jpg
عند الضغط على Preview Counter
http://www.up4world.com/images/store10/e765dc9ef2.jpg
كود السكربت المشروح
/*
* ----------------------------------------------------------------------------
* "THE BEER-WARE LICENSE" (Revision 42):
* <darktempler@gmail.com> wrote this file. As long as you retain this notice you
* can do whatever you want with my code. If we meet some day, and you think
* this code is worth it, you can buy me a beer in return - Matt Labrum (-dt-)
* ----------------------------------------------------------------------------
*/
var MainScopePlus = this;
var STATUS_UNKNOWN = 0;
var STATUS_OFFLINE = 1;
var STATUS_APPEAROFFLINE = 2;
var STATUS_ONLINE = 3;
var STATUS_BUSY = 4;
var STATUS_BRB = 5;
var STATUS_IDLE = 6;
var STATUS_AWAY = 7;
var STATUS_ONPHONE = 8;
var STATUS_OUTLUNCH = 9;
var EVENTICON_ONLINE = 0;
var EVENTICON_OFFLINE = 1;
var EVENTICON_AWAY = 2;
var EVENTICON_BUSY = 3;
var EVENTICON_BLOCKED = 4;
var EVENTICON_PLUS = 5;
var EVENTICON_NAMECHANGE = 6;
var EVENTICON_PSMCHANGE = 7;
var EVENTICON_MEDIACHANGE = 8;
var EVENTICON_EMAIL = 9;
var EVENTICON_MUSICCHANGE = 10;
var MESSAGEKIND_UNKNOWN = 0;
var MESSAGEKIND_SAYS = 1;
var MESSAGEKIND_WINKS = 2;
var MESSAGEKIND_VOICECLIPS = 3;
var MESSAGEKIND_SEARCHING = 4;
var MESSAGEKIND_FIND = 5;
var MESSAGEKIND_SAYSOFFLINE = 6;
var CREATEWNDOPT_NORMAL = 0;
var CREATEWNDOPT_INVISIBLE = 1;
var CREATEWNDOPT_DONTACTIVATE = 2;
var WNDEXITCODE_OK = 1;
var WNDEXITCODE_CANCEL = 2;
var WNDEXITCODE_ABORT = 3;
var WNDEXITCODE_RETRY = 4;
var WNDEXITCODE_IGNORE = 5;
var WNDEXITCODE_YES = 6;
var WNDEXITCODE_NO = 7;
var Class = {
'create' : function(){return function(){this.__construct.apply(this,arguments)} },
'extend' : function(array1,array2){ for(var x in array2){array1[x] = array2[x]; } return array1;},
'mergeArray' : function(array1,array2){for(var i=0;i < array2.length;i++){array1[array1.length] = array2[i];}return array1;}
}
function $A(ar){
var newvar = [];
for(var i=0;i<ar.length;i++){
newvar[newvar.length] = ar[i];
}
return newvar;
}
//orginal typeof doesnt return information about Arrays , Regexp , Date or any Object.
function TypeOf2(thing){
if(thing){
if(thing.constructor){
switch(thing.constructor){
case Array : return 'Array';
case RegExp : return 'RegExp';
case Date : return 'Date';
}
}
}
return typeof(thing);
}
Class.extend(Array.prototype , {
'foreach' : function(func){if(this.length !=0){for(var i=0;i<this.length;i++){if(func(this[i],i))break;}}else{for(var x in this){if(func(this[x]))break;}}},
'diff' : function (ar2){
this.foreach(function(item,num){
for(var i=0;i<ar2.length;i++){
try{
if(item == ar2[i]){
ar2[i] = false;
}
}
catch(e){
if(item === ar2[i]){
ar2[i] = false;
}
}
}
}.bind(this));
var diffs = Array();
ar2.foreach(function(item,num){
if(item){
diffs[diffs.length] = item;
}
}.bind(this));
return diffs;
}
})
Class.extend(String.prototype, {
'preg_quote' : function () {
//makes the string safe to use in regular expression search
str = this.replace(/([\[\]\|\)\(\*\?\+\.])/g, '\\$1');
return str;
},
"trim" : function(){
var s = this.replace(/^([ ]+)/,'');
s = s.replace(/([ ]+)$/,'');
return s;
},
"toBBCode" : function(){
return this.replace(/(\<([BISU])\>(.*?)\<\/\2\>)/ig,"[$2]$3[/$2]");
},
"replaceAll" : function(search,replace){
var s = this;
if(TypeOf2(search) =='Array' && TypeOf2(replace)=='Array'){
for(var i=0;i<search.length;i++){
s = s.replace(new RegExp(search[i].preg_quote(),'g'),replace[i]);
}
}
return s;
},
//function by Mitch (Chestah)
"entityReplace" : function(){
var words = ['"', '&', '<', '>', ''', 'Œ', 'œ', 'Š', 'š', 'Ÿ', 'ˆ', '˜', '–', '—', '‘', '’', '‚', '“', '”', '„', '†', '‡', '‰', '‹', '›', '€' ];
var replace = ['\"', '&', '<', '>', '\'', 'Œ', 'œ', 'Š', 'š', 'Ÿ', 'ˆ', '˜', '–', '—', '‘', '’', '‚', '“', '”', '„', '†', '‡', '‰', '‹', '›', '€' ];
return this.replaceAll(words,replace);
}
}
);
// renamed base64Decode function from http://www.hw-group.com/support/tea/index_en.html#BASE64
function atob(str){
var result = "";
var i = 0;
var x = 0;
var y = 0;
var z = 0;
var count = -1;
for (i=0; i < str.length; i++) {
c = str.charAt(i);
if ('A' <= c && c <= 'Z') x = str.charCodeAt(i) - 65; // 65 = 'A'
else if ('a' <= c && c <= 'z') x = str.charCodeAt(i) - 97 + 26; // 97 = 'a'
else if ('0' <= c && c <= '9') x = str.charCodeAt(i) - 48 + 52; // 48 = '0'
else if (c == '+') x = 62;
else if (c == '/') x = 63;
else continue;
count++;
switch (count % 4) {
case 0:
y = x;
continue;
case 1:
z = (y << 2) | (x >> 4);
y = x & 0x0F;
break;
case 2:
z = (y << 4) | (x >> 2);
y = x & 0x03;
break;
case 3:
z = (y << 6) | x;
y = 0;
break;
}
result = result + String.fromCharCode(z);
}
return result.toString();
}
Function.prototype.bind = function(){
var __method = this;
var object = arguments[0];
return function() {return __method.apply(object, arguments);}
}
/*
var BoundArray = Array();
Function.prototype.bind = function(){
BoundArray[BoundArray.length] = [this, arguments[0]];
var num = BoundArray.length -1;
return new Function('','BoundArray['+num+'][0].apply(BoundArray['+num+'][1],$A(arguments));');
}
*/
//AJAX class
var Ajax = Class.create();
Ajax.prototype = {
"options" : {
'method' : 'GET',
'data':'',
"timeout" : 0,
'onComplete':function(){} ,
'onError' : function(){},
'onTimeout' : function(){},
'contentType' : false
},
"__construct" : function(url,options){
this.options = Class.extend(this.options , options);
var onComplete = this.options.onComplete;
var onError = this.options.onError;
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open(this.options.method, url, true);
if(this.options.method=='POST' && !this.options.contentType){
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
}
if(this.options.contentType){
xmlhttp.setRequestHeader('Content-Type', this.options.contentType);
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState==4) {
if(xmlhttp.status == 200){
onComplete(xmlhttp.responseText,xmlhttp);
}else{
//Debug.Trace(xmlhttp.status);
onError(xmlhttp);
}
}
};
//if(this.options.timeout > 0)this.startTimer();
//Debug.Trace(this.options.data);
xmlhttp.send(this.options.data);
},
"startTimer" : function(){
this.timer = new Timer(this.options.onTimeout,this.options.timeout) ;
},
"stopTimer" : function(){
if(this.timer)
this.timer.cancel();
}
}
//FILE class
var File = Class.create();
File.prototype = {
'options' : {},
"__construct" : function(){
this.object = new ActiveXObject("Scripting.FileSystemObject");
},
'getContents' : function(file){
var fO = this.getFileHandle(file);
var text = fO.ReadAll();
fO.close();
return text;
},
'normalizePath' : function(path){
return path.replace(/\\/g,'\\\\');
},
'fileExists' : function(file){
if(this.object.FileExists(this.normalizePath(file) )){
return true;
}else{
return false;
}
},
'putContents' : function(file,data){
var fileO = this.getFileHandle(file,2);
fileO.Write(data);
fileO.close();
},
'appendData' : function(file,data){
var fO = this.getFileHandle(file,8);
fO.Write(data);
fO.close();
},
'unlink' : function(file){
var fO = this.getFileHandle(file);
fO.Delete();
fO.close();
},
'move' : function(file,to){
var fO = this.getFileHandle(file);
fO.Move(this.normalizePath(to));
fO.close();
},
'copy' : function(file,to){
var fO = this.getFileHandle(file);
fO.Copy(this.normalizePath(to));
fO.close();
},
"folderExists" : function(folder){
return this.object.FolderExists(this.normalizePath(folder ));
},
"createFolder" : function(folder){
if(!this.folderExists(folder)){
return this.object.CreateFolder(this.normalizePath(folder ));
}else{
return false;
}
},
'getFileHandle' : function(file,type){
var type = (typeof(type)=='undefined') ? 1 : type;
if(this.fileExists(file)){
return this.object.OpenTextFile(this.normalizePath(file), type, 0);
}else{
return this.object.CreateTextFile(this.normalizePath(file ), true);
}
}
}
//TIMER
var Timer = Class.create();
var RegisteredTimers = Array('') ;
Timer.prototype = {
"options" : {},
"__construct" : function(func,time,id){
this.options.func = func;
this.options.time = time;
this.register(id);
},
"register" : function(id){
if(!id){
id = RegisteredTimers.length;
//RegisteredTimers.foreach(function(value,num){if(va lue==this.options.func){id=num;return true;};return false;}.bind(this))
}
this.id = id;
RegisteredTimers[id] = this.options.func;
MsgPlus.AddTimer(id,this.options.time);
},
"cancel" : function(){
MsgPlus.CancelTimer(this.id);
}
}
Timer.interval = Class.create();
Timer.interval.prototype = {
"__construct" : function(func,time){
this.func = func;
this.time = time;
this.id = RegisteredTimers.length;
this.register();
},
"register" : function(){
this.timer = new Timer(this.reapplytimer.bind(this),this.time,this. id);
},
"cancel" : function(){
MsgPlus.CancelTimer(this.id);
},
"reapplytimer" : function(){
this.func();
this.timer ='';
this.register();
}
}
function OnEvent_Timer(sTimerId){
if(RegisteredTimers[sTimerId]){
RegisteredTimers[sTimerId]();
//clean our RegisteredTimers array...
//RegisteredTimers.splice(sTimerId,1);
}
}
//these wrappers are to keep shawnz happy :P
function setTimeout(func,time){
return new Timer(func,time);
}
function setInterval(func,time){
return new Timer.interval(func,time);
}
function clearTimeout(timer){
if(timer.cancel)timer.cancel();
}
function clearInterval(timer){
if(timer.cancel)timer.cancel();
}
// EVENT LISTENER
var EventListenerEvents = {
'OnEvent_Initialize' : Array(),
'OnEvent_Uninitialize' : Array(),
'OnEvent_Signin' : Array(),
'OnEvent_Signout' : Array(),
'OnEvent_MyStatusChange' : Array(),
'OnEvent_MyNameChange' : Array(),
'OnEvent_MyPsmChange' : Array(),
'OnEvent_MyMediaChange' : Array(),
'OnEvent_ContactSignin' : Array(),
'OnEvent_ContactStatusChange' : Array(),
'OnEvent_ContactNameChange' : Array(),
'OnEvent_ContactPsmChange' : Array(),
'OnEvent_ContactMediaChange' : Array(),
'OnEvent_ContactBlocked' : Array(),
'OnEvent_ContactUnblocked' : Array(),
'OnEvent_MessengerLocked' : Array(),
'OnEvent_MessengerUnlocked' : Array(),
'OnEvent_ChatWndCreated' : Array(),
'OnEvent_ContactListWndCreated' : Array(),
'OnEvent_ContactListWndDestroyed' : Array(),
'OnEvent_ChatWndSendMessage' : Array(),
'OnEvent_ChatWndReceiveMessage' : Array(),
'OnEvent_ChatWndCreated' : Array(),
'OnEvent_ChatWndDestroyed' : Array(),
'OnEvent_ChatWndContactAdded' : Array(),
'OnEvent_ChatWndContactRemoved' : Array()
}
AddEventListener = Class.create();
AddEventListener.prototype = {
'event' : '',
'__construct' : function(type,func){
//plus event
if(EventListenerEvents['OnEvent_'+type]){
this.event = 'OnEvent_'+type;
if(EventListenerEvents[this.event].length==0){
this.createEventFunc();
}
EventListenerEvents[this.event][EventListenerEvents[this.event].length] = func;
}else{
//non plus event
this.event = type;
if(!EventListenerEvents[this.event])EventListenerEvents[this.event] = Array();
EventListenerEvents[this.event][EventListenerEvents[this.event].length] = func;
}
},
"createEventFunc" : function(){
//create the function
// Debug.Trace('plus function' + this.event +' hooked');
var bindedEvent = this.binded.bind(this);
MainScopePlus[this.event] = bindedEvent;
},
'binded' : function(){
var x = new CallEventListener(this.event,true);
return x.call.apply(this,arguments);
}
}
CallEventListener = Class.create();
CallEventListener.prototype = {
'__construct' : function(event,wait){
this.event = event;
var args = $A(arguments);
args.shift();
args.shift();
if(!wait)return this.call.apply(this,args);
},
"call" : function(){
// Debug.Trace(this.event);
// Debug.Trace(EventListenerEvents[this.event].length);
if(EventListenerEvents[this.event]){
var args = $A(arguments);
for(var i=0;i<EventListenerEvents[this.event].length;i++){
EventListenerEvents[this.event][i].apply(this,args);
}
}
}
}
//Command
var Command = Class.create();
Command.prototype = {
"commands" : {},
"__construct" : function(){
var x = this.bound.bind(this);
this.event = new AddEventListener('ChatWndSendMessage',x);
},
"add" : function(name,func){
this.commands[name] = func;
},
"bound" : function(chatWnd,message){
for(x in this.commands){
var regexp = new RegExp('^'+ x.preg_quote()+'( .+|)$','i');
var m = message.match(regexp);
if(m){
var params = m[1].substr(1);
chatWnd.editText = this.commands[x].apply(this,arguments);
break;
}
}
}
}
var RemoteCommand = Class.create();
RemoteCommand.prototype = {
"commands" : {},
"__construct" : function(){
var x = this.bound.bind(this);
this.event = new AddEventListener('ChatWndReceiveMessage',x);
},
"add" : function(name,func){
this.commands[name] = func;
},
"bound" : function(chatWnd,sOrgin,message,kind){
for(x in this.commands){
var regexp = new RegExp('^'+ x.preg_quote()+'( .+|)$','i');
var m = message.match(regexp);
if(m){
var params = m[1].substr(1);
this.commands[x].apply(this,arguments);
break;
}
}
}
}
var PrefStore = Class.create();
PrefStore.prototype = {
"__construct" : function(filename){
this.file = new File();
this.filename = MsgPlus.ScriptFilesPath + '/' + filename + '.xml';
this.xml = new ActiveXObject("Microsoft.XMLDOM");
this.xml.async=false;
if(!this.file.fileExists(this.filename)){
this.createFile();
}else{
this.loadXML();
}
},
"createFile" : function(){
var topNode = this.xml.createElement('prefs');
this.xml.appendChild(topNode);
this.save();
},
"loadXML" : function(){
this.xml.loadXML(this.file.getContents(this.filena me));
},
"save" : function(){
this.xml.save(this.filename);
},
"set" : function(path,data){
//path = String(path).toLowerCase( );
path = path.split('/');
var lastNode = this.xml.getElementsByTagName('prefs')[0];
for(var i=0;i<path.length;i++){
var node = lastNode.selectNodes('pref[@name="'+path[i]+'"]');
if(node.length != 0){
lastNode = node[0];
}else{
var node = this.xml.createElement('pref');
node.setAttribute('name',path[i]);
lastNode.appendChild(node);
lastNode = node;
}
}
var text = this.xml.createTextNode(data);
var textNodeF = this.getFirstTextNode(lastNode);
if(textNodeF){
lastNode.replaceChild(text,textNodeF);
}else{
lastNode.appendChild(text);
}
},
"get" : function(path){
var xpath = 'prefs/' + this.pathToXpath(path);
var element = this.xml.selectNodes(xpath);
if(element.length != 0){
var text = this.getFirstTextNode(element[0]);
if(text){
return text.text;
}
}
return -1;
},
"getAsArray" : function(path){
var xpath = 'prefs/' + this.pathToXpath(path) + '/*';
var returns = {};
var elements = this.xml.selectNodes(xpath);
if(elements.length==0){
Debug.Trace('fat zero');
return returns;
}
var array = Array();
for(var i=0;i<elements.length;i++){
if(elements[i].nodeType == 1)
array = this.getAsArrayAddNode(elements[i],array);
}
return array;
},
"getAsArrayAddNode" : function(node,array){
if(node.childNodes.length==1){
array[node.getAttribute("name")] = this.getFirstTextNode(node).text;
}else if(node.childNodes.length==0){
array[node.getAttribute("name")] = '';
}else{
//more than one child...
array[node.getAttribute("name")] = {};
for(var i=0;i<node.childNodes.length;i++){
if(node.childNodes[i].nodeType == 1)
array[node.getAttribute("name")] = this.getAsArrayAddNode(node.childNodes[i],array[node.getAttribute("name")]);
}
}
return array;
},
"pathToXpath" : function(path){
var parts = path.split('/');
var xpath = '';
for(var i=0;i<parts.length;i++){
xpath += "pref[@name='"+parts[i]+"']/";
}
return xpath.substring(0,xpath.length-1);
},
"getFirstTextNode" : function(element){
if(element.hasChildNodes){
for(var i=0;i<element.childNodes.length;i++){
if(element.childNodes[i].nodeType == 3){
return element.childNodes[i];
}
}
}
return false;
}
}
var SoapRequest = Class.create();
SoapRequest.prototype = {
"__construct" : function(url){
this.url = url;
this.xmlP = new ActiveXObject("Microsoft.XMLDOM");
this.xmlP.async=false;
//create the basic SOAP packet.
this.doc = this.xmlP.createElement("SOAP-ENV:Envelope");
this.doc.setAttribute("xmlns:SOAP-ENV","http://schemas.xmlsoap.org/soap/envelope/");
this.doc.setAttribute("xmlns:xsi","http://www.w3.org/1999/XMLSchema-instance");
this.doc.setAttribute("xmlns:xsd","http://www.w3.org/1999/XMLSchema");
this.xmlP.appendChild(this.doc);
this.body = this.xmlP.createElement("SOAP-ENV:Body");
this.doc.appendChild(this.body);
},
"call" : function(name,parameters,ns,onComplete){
this.onComplete = onComplete;
var reqBody = this.xmlP.createElement("ns1:" + name);
reqBody.setAttribute('xmlns:ns1',ns);
reqBody.setAttribute('SOAP-ENV:encodingStyle','http://schemas.xmlsoap.org/soap/encoding/');
for(name in parameters){
reqBody.appendChild(this.createNodeAndSetType(name ,parameters[name]));
}
this.body.appendChild(reqBody);
var d = this.doc.xml;
new Ajax(this.url,{'method':'POST','data':d,'onComplet e':this.parseCallback.bind(this),"onError":function(x){Debug.Trace('error'+x.status)},"contentType":"text/xml"});
},
"createNodeAndSetType" : function(name,value){
var type = TypeOf2(value);
if(type != "Array"){
var node = this.xmlP.createElement(name);
node.appendChild(this.xmlP.createTextNode(value));
switch(TypeOf2(value)){
case "string" : node.setAttribute('xsi:type','xsd:string');break;
case "number" : node.setAttribute('xsi:type','xsd:int');break;
case "boolean" : node.setAttribute('xsi:type','xsd:boolean');break;
}
} else{
//do array stuff...
}
return node;
},
"parseCallback" : function(data){
if(data == '') return;
this.xmlP.loadXML(data);
var bodyNode = this.xmlP.getElementsByTagName('SOAP-ENV:Body')[0];
bodyNode = bodyNode.childNodes[0];
if(bodyNode.childNodes[0].childNodes.length > 1){
bodyNode = bodyNode.childNodes[0];
}
this.returnArray = Array();
if(bodyNode.hasChildNodes){
for(var i=0;i<bodyNode.childNodes.length;i++){
if(bodyNode.childNodes[i].nodeType == 1){
//Debug.Trace("LOOP->"+bodyNode.childNodes[i].tagName + '->'+bodyNode.childNodes[i].childNodes.length);
this.returnArray = this.parseNode(bodyNode.childNodes[i],this.returnArray);
}
}
}
if(this.returnArray['return']){
this.returnArray = this.returnArray['return'];
}
this.onComplete(this.returnArray);
},
"parseNode" : function(node,array,inArray){
if(node.getAttribute('xsi:type').match('Array')){
//Debug.trace('IsArray');
array[node.tagName] = new Array();
for(var i=0;i<node.childNodes.length;i++){
array[node.tagName][i] = Array();
if(node.childNodes[i].nodeType == 1){
// Debug.Trace("SUBLOOP->"+node.childNodes[i].tagName + '->'+node.childNodes[i].childNodes.length);
array[node.tagName][i] = this.parseNode(node.childNodes[i],array[node.tagName][i]);
}
}
}else{
if(node.childNodes.length > 1){
for(var i=0;i<node.childNodes.length;i++){
if(node.childNodes[i].nodeType == 1){
// Debug.Trace("SUBSUBLOOP->"+node.childNodes[i].tagName + '->'+node.childNodes[i].childNodes.length);
if(node.childNodes[i].childNodes.length == 1){
var d = node.childNodes[i].childNodes[0].text;
array[node.childNodes[i].tagName] = d;
}else if(node.childNodes[i].childNodes.length ==0){
array[node.childNodes[i].tagName] = '';
}else{
// Debug.Trace('->->lower->->' + node.childNodes[i].childNodes.length);
array[node.childNodes[i].tagName] = Array();
for(var x=0;x<node.childNodes[i].childNodes.length;x++){
// Debug.Trace("->->->"+node.childNodes[i].childNodes[x].tagName)
array[node.childNodes[i].tagName] = this.parseNode(node.childNodes[i].childNodes[x],array[node.childNodes[i].tagName]);
}
}
}
}
}else{
if(node.childNodes.length <= 1){
if(node.getAttribute('xsi:type').match('base64')){
var text = atob(node.text);
}else{
var text = node.text;
}
if(!inArray){
array[node.tagName] = text;
}else{
array[array.length] = text
}
}else{
// Debug.Trace('lower in l');
}
}
}
return array;
}
}
// example to search google with the above class.
/*
var parameters = {
"key" : "",
"q" : "porn",
"start" : 0,
"maxResults" : 3,
"filter" : false,
"restrict" : "",
"safeSearch" : false,
"lr" : "lang_en",
"ie" : "",
"oe" : ""
};
var testSoap = function(xxx){
Debug.Trace('x');
}
var soapClient = new SoapRequest("http://api.google.com/search/beta2");
soapClient.call("doGoogleSearch",parameters,"urn:GoogleSearch", testSoap);
*/
وتستطيعون رؤية الكود وتعديله بالضغط على Edit... في خيارات المسنجر بلس
http://www.up4world.com/images/store10/dc21e64761.jpg
http://www.up4world.com/images/store10/ca61824d25.jpg
لغة البرمجة المستخدمة في كتابة الاكواد على ما اعتقد هي الفيجوال بيسك الحديثة (غير متأكد)
اذا كنت مبرمجا فتستطيع كتابة سكربتات جديدة عن طريق اختيار Creat New
http://www.up4world.com/images/store10/39b8b6cea4.jpg
هناك العديد من السكربت التي تستطيع ان تجدها بموقع MSN Plus (http://www.msgpluslive.net/scripts/browse/)
سكربتات متخصصة بالـ Nicknames والرسائل الخاصة (http://www.msgpluslive.net/scripts/browse/14/Nickname-and-PSM/)
سكربتات متخصصة بالاصوات (http://www.msgpluslive.net/scripts/browse/15/Sound-and-Audio/)
سكربتات متخصصة بالرسائل التلقائية (الرد التلقائي) (http://www.msgpluslive.net/scripts/browse/16/Bots-and-Autotalkers/)
سكربتات متخصصة بالرسائل، ارسال استقبال الرسائل، فلترة الكلمات (http://www.msgpluslive.net/scripts/browse/17/Text-manipulation/)
سكربتات متخصصة بحالة الاتصال والمعلومات (http://www.msgpluslive.net/scripts/browse/18/Stats-and-Information/)
سكربتات متخصصة بصور المستجر المعروضة Display Picture (http://www.msgpluslive.net/scripts/browse/19/Display-Pictures/)
سكربتات متخصصة بالالعاب والفعاليات (http://www.msgpluslive.net/scripts/browse/20/Games-and-Activities/)
سكربتات متخصصة بالتنبيهات (http://www.msgpluslive.net/scripts/browse/21/Toasts-and-Notifications/)
سكربتات متخصصة بارسال واستقبال الملفات (http://www.msgpluslive.net/scripts/browse/22/Files/)
سكربتات ظريفة لسرقة الصورة المعروضة وعرضها لديك او التكلم كانك ذاك الشخص (http://www.msgpluslive.net/scripts/browse/23/Mockers-and-Content-Stealing/)
سكربتات طريفة (http://www.msgpluslive.net/scripts/browse/24/Fun/)
سكربتات تضيف ادوات جديدة ومفيدة الى المسنجر (http://www.msgpluslive.net/scripts/browse/8/New-Functions/)
سكربتات بلغات اخرى غير الانجليزية (http://www.msgpluslive.net/scripts/browse/10/Non-English/)
تحياتي