AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Need SomeOne to check my translation plugin (https://forums.alliedmods.net/showthread.php?t=130363)

peku33 06-23-2010 06:36

Need SomeOne to check my translation plugin
 
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;
    }
}


Alka 06-23-2010 07:06

Re: Need SomeOne to check my translation plugin
 
Somehting like this? -> http://forums.alliedmods.net/showthread.php?p=820566 and i think that one works, so you don't need any extra work.


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

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