Raised This Month: $ Target: $400
 0% 

Need SomeOne to check my translation plugin


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
Author Message
peku33
Junior Member
Join Date: Nov 2008
Old 06-23-2010 , 06:36   Need SomeOne to check my translation plugin
Reply With Quote #1

Hi all!
This is my second post

Few days ago I've created plugin which is translating whole chat to player langs, via google translate.

My problem is that i can't test it, because I don't know anyone with foreign IP.

Here is my code. Please post any suggestions here.

Code:
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <geoip>
#include <cstrike>
#include <sockets_hz>
#include <regex>
#include <colorchat>

#define PLUGIN "Chat Translation ULTIMATE!"
#define VERSION "1.0"
#define AUTHOR "peku33"
#define MAXSOCK 64
#define CHANGE_TASKID 4321



new sTranslationSocks[MAXSOCK];
new sTranslationSender[MAXSOCK];
new sTranslationDestTeam[MAXSOCK];
new sTranslationDestLang[MAXSOCK][3];
new sTranslationSrcLang[MAXSOCK][3];


public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    register_cvar("amx_translation_version", VERSION);
    
    register_clcmd("say", "hook_say");
    //register_clcmd("say_team", "hook_say_team");
}
public hook_say(sender)
{
    if(is_user_connected(sender))
    {
        new text[192]
        read_args(text, 191);
        remove_quotes(text);
        
        prepare_translation(sender, text, 0);
        return PLUGIN_HANDLED;
        
    }
    return PLUGIN_CONTINUE;
}
public prepare_translation(sender, text[], team)
{
    //Find langs to translate, exclude sender lang
    new sender_ip[32];
    new sender_lang[3];
    
    get_user_ip(sender, sender_ip, 32, true);
    geoip_code2(sender_ip, sender_lang)
    
    //Translate
    new rec_ip[32];
    new rec_lang[3];
    
    new langs_used[33][3];
    new bool:yet = false;
    new transid, err;
    
    new query[512];
    for(new i = 1; i <= 32; i++)
    {
        if(is_user_connected(i) && !is_user_bot(i))
        {
            get_user_ip(i, rec_ip, 31, true);
            geoip_code2(rec_ip, rec_lang);
            yet = false;
            if(equali(rec_lang, sender_lang))
            {
                showchat(sender, text, team, rec_lang, sender_lang);
                continue;
            }
            //Check wether this lang has been translated
            for(new j = 1; j <= 32; j++)
            {
                if(equali(rec_lang, langs_used[j])/* || i == sender*/)
                {
                    yet = true;
                }
            }
            if(!yet)
            {
                transid = find_free_sock();
                if(transid == -1)
                {
                    showchat(sender, text, team, rec_lang, sender_lang);
                }
                else
                {
                    if((sTranslationSocks[transid] = socket_open("ajax.googleapis.com", 80, SOCKET_TCP, err)) > 0)
                    {
                        socket_unblock(sTranslationSocks[transid]);
                        copy(sTranslationDestLang[transid], 3, rec_lang);
                        copy(sTranslationSrcLang[transid], 3, sender_lang);
                        sTranslationDestTeam[transid] = team;
                        sTranslationSender[transid] = sender;
                        
                        //Prepare query
                        strtolower(sender_lang);
                        strtolower(rec_lang);
                        
                        //Replace
                        replace_all(text, 191, " ", "%20");
                        replace_all(text, 191, "&", "");
                        replace_all(text, 191, "=", "");
                        replace_all(text, 191, "^"", "");
                        replace_all(text, 191, "'", "");
                        
                        formatex(query, 511, "GET /ajax/services/language/translate?v=1.0&q=%s&langpair=%s|%s HTTP/1.1^r^nHost: ajax.googleapis.com^r^nUser-Agent: peku33 chat translator (%s)^r^n^r^n", text, sender_lang, rec_lang, VERSION);
                        socket_send(sTranslationSocks[transid], query, strlen(query))
                        set_task(0.1, "check_socket_change", CHANGE_TASKID+transid, _, _, "b");
                    }
                    else
                    {
                        set_fail_state("Cannot open socket to google");
                    }
                }
            }
        }
    }
}
public showchat(sender, text[], team, dstlang[3], srclang[3])
{
    new ip[32], lang[3];
    if(is_user_connected(sender))
    {
            new Color:color;
            switch(cs_get_user_team(sender))
            {
                case CS_TEAM_CT:
                {
                    color = BLUE;
                }
                case CS_TEAM_T:
                {
                    color = RED;
                }
                default:
                {
                    color = GREY;
                }
            }
            new name[32];
            get_user_name(sender, name, 31);
            for(new i = 1; i <= 32; i++)
            {
                if(is_user_connected(i) && is_user_alive(i) == is_user_alive(sender) && (team == 0 || cs_get_user_team(i) == CsTeams:team))
                {
                    get_user_ip(i, ip, 31, true);
                    geoip_code2(ip, lang);
                    if(equali(lang, dstlang))
                    {
                        ColorChat(i, color, "%s: ^x01%s ^x04[%s->%s]", name, text, srclang, dstlang);
                    }
                }
            }
    }
}
public find_free_sock()
{
    for(new i = 1; i < MAXSOCK; i++)
    {
        if(sTranslationSocks[i] == 0)
        {
            return i;
        }
    }
    return -1;
}
public check_socket_change(taskid)
{
    new transid = taskid - CHANGE_TASKID;
    if(socket_change(sTranslationSocks[transid]) > 0)
    {
        remove_task(taskid);
        new data[512];
        socket_recv(sTranslationSocks[transid], data, 511);
        //Parse returned data
        new regret, regerr[128]
        new Regex:reg = regex_match(data, "{^"translatedText^":^"(.+)^"}", regret, regerr, 127, "s");
        switch(reg)
        {
            case REGEX_PATTERN_FAIL:
            {
                log_amx("Regex Pattern Fail! (%d) (%s)", regret, regerr);
            }
            case REGEX_MATCH_FAIL:
            {
                log_amx("Regex Match Fail! (%d) (%s)", regret, regerr);
            }
            case REGEX_NO_MATCH:
            {
                log_amx("Regex No MATCH Fail! (%d) (%s)", regret, regerr);
            }
            default:
            {
                new text[192];
                regex_substr(reg, 1, text, 191);
                showchat(sTranslationSender[transid], text, sTranslationDestTeam[transid], sTranslationDestLang[transid], sTranslationSrcLang[transid]);
                regex_free(reg);
            }
        }
        socket_close(sTranslationSocks[transid]);
        sTranslationSocks[transid] = 0;
    }
}
peku33 is offline
 


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 14:57.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode