Arama


ozan_77 - avatarı
ozan_77
Ziyaretçi
3 Şubat 2009       Mesaj #1
ozan_77 - avatarı
Ziyaretçi
/usay scriptinde bildigiminz gibi /usay <mesaj> yazinca sanki karsindaki adam yolluyormus gibi oluyor..
Ama yanliz, bunda yazi stili ayni olmuyor senin kendi yazi stilin gidiyor..Msn Cry

Acaba kodlamasini bilen birisi onuda ekleyebilir mi ?

Kod burda ;

Kod:
STATE_INACTIVE = 0;
STATE_RUNNING = 1;
STATE_FINISHING = 2;

CHANGE_NAME_LATENCY = 1000;

var cur_state = STATE_INACTIVE;
var original_name;
var contact_name;
var message_to_send;
var chat_window;
var retry_count;
var dll_name;



function OnGetScriptCommands()
{
    var commands = '<ScriptCommands>';
        commands+='<Command>';
            commands+='<Name>usay</Name>';
            commands+='<Description>Impresonate as the contact you are talking with</Description>';
            commands+='<Parameters/>';
        commands+='</Command>';
    commands+='</ScriptCommands>';
    return commands;
}


function OnEvent_Initialize( MessengerStart )
{
    Debug.Trace("INIT");
    dll_name = MsgPlus.ScriptFilesPath;
    dll_name += "\\USay.dll";
    Interop.Call( dll_name, "USay_Init" );
}

function OnEvent_Uninitialize( MessengerExit )
{
    Interop.FreeDll( dll_name );
}

function ShowHelp()
{
    var helpstr;
    helpstr =     "In normal chat, Use:\n\r"
                + "    /usay <message>\n\r"
                + "\n\r"
                + "In group chat, Use:\n\r"
                + "    /usay <contact email> <message>\n\r"
                + "        - or -\n\r"
                + "    /usay <contact name> <message>\n\r"
                + "        - or -\n\r"
                + "    /usay <contact number> <message>\n\r"
                + "\n\r"
                + "You can also:\n\r"
                + "  Get a numerical list of contacts:\n\r"
                + "    /usay /list\n\r"
                + "  Show about screen:\n\r"
                + "    /usay /about\n\r"
                + "  Show help:\n\r"
                + "    /usay /help\n\r"
                + "        - or solely -\n\r"
                + "    /usay";
    Interop.Call( "User32.dll", "MessageBoxW", 0, helpstr, "USay - Help", 0 );
}

function ShowContacts( Contacts )
{
    var helpstring = '';
    //iterate through all contacts and create a list
    var i = new Enumerator( Contacts );
    var j = 0;
    while( !i.atEnd() ) 
    {
        var Contact = i.item();
        helpstring += j;
        helpstring += " - ";
        helpstring += Contact.Name;
        helpstring += " ( "
        helpstring += Contact.Email;
        helpstring += " )\n\r";
        j++;
        i.moveNext();
    }
    Interop.Call("User32.dll", "MessageBoxW", 0, helpstring, "USay - List", 0);

}

function CheckArgs( Arg, ChatWnd )
{
    var forceexit = false;
    if( Arg == null ) Arg = "/help";
        
    switch( Arg.toLowerCase() )
    {
        case "/help":
            ShowHelp();
            forceexit = true;
            break;
        case "/about":
            Interop.Call( dll_name, "USay_About" );
            forceexit = true;
            break;
        case "/list":
            ShowContacts( ChatWnd.Contacts );
            forceexit = true;
            break;
    
        default:
    }
    return forceexit;
}

function IsNumeric( str )
{
    var legal = "0123456789";
    var c;
    for ( i = 0; i < str.length; i++ ) 
    { 
        c = str.charAt( i ); 
        if ( legal.indexOf( c ) == -1 ) 
        {
            return false;
        }
    }
    return true;
}


function GetContactEmail( Arg, Contacts )
{
    var i;
    //1st priority = email
    i = new Enumerator( Contacts );
    while( !i.atEnd() ) 
    {
        var Contact = i.item();
        if( Contact.Email == Arg ) 
        {
            return Contact.Email;
        }
        i.moveNext();
    }
    //2nd priority = name
    i.moveFirst();
    while( !i.atEnd() )
    {
        var Contact = i.item();
        if( Contact.Name == Arg ) 
        {
            return Contact.Email;
        }
        i.moveNext();
    }
    //3rd priority = number
    if( IsNumeric( Arg ) )
    {
        i.moveFirst();
        for( j=0; j<Arg; j++ )
        {
            if( i.atEnd() ) 
            {   
                return null;
            }
            i.moveNext();
        }
        return i.item().Email;
    }
    //no such contact
    return null;
}

function OnEvent_ChatWndSendMessage( ChatWnd, Message ) 
{
    chat_window = ChatWnd;
    Command = Message.split(' ');
    
    var j=0;
    var abort = false;
    
    switch ( Command[j].toLowerCase() )
    {        
        case "/usay":
            j++;
            //if no text or system arg, just go do nothing
            if( CheckArgs( Command[j], ChatWnd ) )
            {
                Message = '';
                return Message;
            }
            var i = new Enumerator( ChatWnd.Contacts );
            var thedude;
            switch( ChatWnd.Contacts.Count ) 
            {
                case 1:
                    thedude = i.item();
                    break;
                //we dont really get here in real life
                case 0:
                    //talking to myself again?
                    helpstring = "It seems like nobody wants to talk to you\n\rAre you talking to yourself again?";
                    Interop.Call("User32.dll", "MessageBoxW", 0, helpstring, "USay - Error", 0);
                    abort = true;
                    break;
                default:
                    //gangbang mode
                    var contact_email = GetContactEmail( Command[j], ChatWnd.Contacts );
                    if( contact_email == null )
                    {
                        //wtf?
                        helpstring = "Contact not found! type '/usay /help' for help, '/usay /list' for contact list";
                        Interop.Call("User32.dll", "MessageBoxW", 0, helpstring, "USay - Error", 0);
                        //make an exception :)
                        abort = true;
                    }
                    else
                    {
                        thedude = i.item();
                        while( !i.atEnd() && i.item().Email != contact_email )
                        {
                            i.moveNext();
                        }
                        j++;
                    }
            }
            // i got the contact, now go ahead
            if( !abort ) 
            {
                Debug.Trace( "USING: " + contact_email );

                //might do something with the contact fonr in the future
                //like using it in MY window
                contact_font = Interop.Call2( dll_name, "USay_SuggestContactFont", thedude.Email );

                //go on craete the new message
                message_to_send = '';
                while( Command[j] != null )
                {
                    message_to_send += Command[j];
                    j++                    
                    if( Command[j] != null ) message_to_send += ' ';
                }
                //get start the magic
                original_name = Messenger.MyName;
                contact_name = thedude.Name;
                cur_state = STATE_RUNNING;
                if( original_name == contact_name )
                {
                    contact_name += ' ';
                } 
                Messenger.MyName = contact_name;
                Debug.Trace("CONTACT NAME SET");
            }
            Message = '';
            break;
        default:
    }
    return Message;
}

function OnEvent_MyNameChange( NewName )
{
    switch( cur_state )
    {
        case STATE_RUNNING:
            if( NewName == contact_name )
            {
                cur_state = STATE_FINISHING;
                retry_count = 3
                MsgPlus.AddTimer( 'sendmessage', CHANGE_NAME_LATENCY );
            }
            break;
        case STATE_FINISHING:
            if( NewName == original_name )
            {
                cur_state = STATE_INACTIVE;
                Debug.Trace( "NAME RESTORED" );
                MsgPlus.CancelTimer( 'restorename' );
            }
            break;
        case STATE_INACTIVE:
            //for some odd reason i get my contact name set again
            if( NewName == contact_name )
            {
                Messenger.MyName = original_name;
                MsgPlus.AddTimer( 'restorename', 500 );
            }
            break;
    }
}


function OnEvent_Timer( TimerId )
{
    switch( TimerId )
    {
        case 'restorename':
               Messenger.MyName = original_name;
               //do this until my name REALLY changes
               if( Messenger.MyName != original_name )
               {
                MsgPlus.AddTimer( 'restorename', 500 );
            }
            break;
        case 'sendmessage':
            chat_window.SendMessage( message_to_send );
            MsgPlus.AddTimer( 'restorename', 500 );
            break;
        default:
    }
}