Allied Modders en español
Misiones - Versión para impresión

+- Allied Modders en español (https://amxmodx-es.com)
+-- Foro: AMX Mod X - Plugins (https://amxmodx-es.com/Forum-AMX-Mod-X-Plugins)
+--- Foro: Aportes (https://amxmodx-es.com/Forum-Aportes--40)
+--- Tema: Misiones (/Thread-Misiones--17962)



Misiones - Cristian' - 21/06/2018

Les vengo a aportar este sistemas de misiones que tenía. Puede ser adaptado a cualquier modo de juego.

Código PHP:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <cstrike>
#include <engine>
#include <fakemeta>

#pragma semicolon 1

#define SZPREFIX "!g[AMXX Mision]"
#define SHOWHUD_CLASSNAME "classname_showhud"
#define is_user_valid_connected(%1) (1 <= %1 <= g_maxplayers && g_connected[%1])
#define is_user_valid_alive(%1) (1 <= %1 <= g_maxplayers && g_alive[%1])

enum _:MISIONS_STRUCT
{
    
MISION_PLAYERS,
    
MISION_NAME[32],
    
MISION_DESCRIPTION[100],
    
MISION_ROUNDS,
    
MISION_TYPE,
    
MISION_CHECK,
    
MISION_LIMIT,
    
MISION_REWARD
};

enum _:MISION_INT
{
    
PLOMO_POR_1,
    
PLOMO_POR_5,
    
PLOMO_POR_10,
    
PLOMO_POR_20,
    
HEAD_X5,
    
HEAD_X10,
    
SIN_CASCO,
    
ACUCHILLANDO,
    
FILO_X5,
    
FILO_A_LA_DECIMA_POTENCIA,
    
FILO_AL_VEINTE_VEINTE,
    
DANIO_PASIVO,
    
DANIO_PROLONGADO,
    
DANIO_EXTENDIDO,
    
DANIO_MASIVO,
    
DANIO_ULTRA,
    
DANIO_COLATERAL,
    
DANIO_DEVASTADOR
};

enum _:MISION_STATS
{
    
MISION_KILLED,
    
MISION_KILLED_HS_PER_ROUND,
    
MISION_KILLED_PER_KNIFE,
    
MISION_DAMAGE_PER_ROUND
};

enum _:MISION_CLASS
{
    
MISION_MONEY 0,
    
MISION_HEALTH,
    
MISION_AP
};

enum _:MISION_TYPE_CHECK
{
    
TYPE_KILL 0,
    
TYPE_KILL_HS,
    
TYPE_KNIFE,
    
TYPE_DAMAGE
};

new const 
MISIONS_CLASS[][] =
{
    
"plata",
    
"vida",
    
"chaleco"
};

new const 
MISIONS[][MISIONS_STRUCT] =
{
    
/*
        * Jugadores de la misión
        * Nombre de la misión 
        * Rondas de la misión
        * Tipo de misión, 
        * Tipo de frag de la misión 
        * Frags de la misión
        * Recompensa de la misión
    */
    
    
10"Plomo por 1""Mata a 1 jugador en 1 ronda"1MISION_MONEYTYPE_KILL1250 }, 
    { 
12"Plomo por 5""Mata a 5 jugadores en 3 rondas"3MISION_MONEYTYPE_KILL5500 }, 
    { 
12"Plomo por 10""Mata a 10 jugadores en 3 rondas"3MISION_MONEYTYPE_KILL101000 },
    { 
14"Plomo por 20""Mata a 20 jugadores 5 rondas"5MISION_MONEYTYPE_KILL202500 },
    { 
12"Head x5""Mata a 5 jugadores con disparos en la cabeza en 3 ronda"1MISION_MONEYTYPE_KILL_HS525 },
    { 
12"Head x10""Mata a 10 jugadores con disparos en la cabeza en 5 ronda"3MISION_MONEYTYPE_KILL_HS1030 },
    { 
14"Sin casco""Mata a 20 jugadores con disparos en la cabeza en 3 ronda"5MISION_MONEYTYPE_KILL_HS2040 },
    { 
12"Acuchillando""Mata a 3 jugadores con cuchillo en 1 ronda"1MISION_HEALTHTYPE_KNIFE325 },
    { 
14"Filo x5""Mata a 5 jugadores con cuchillo en 2 ronda"2MISION_HEALTHTYPE_KNIFE535 },
    { 
12"Filo a la décima potencia""Mata a 10 jugadores con cuchillo en 5 ronda"5MISION_HEALTHTYPE_KNIFE1045 },
    { 
14"Filo al 20/20""Mata a 20 jugadores con cuchillo en 10 ronda"10MISION_HEALTHTYPE_KNIFE20100 },
    { 
14"Daño pasivo""Realiza 250 de daño en 1 ronda"1MISION_APTYPE_DAMAGE25010 },
    { 
12"Daño prolongado""Realiza 500 de daño en 1 ronda"1MISION_APTYPE_DAMAGE50015 },
    { 
12"Daño extendido""Realiza 1.000 de daño en 2 rondas"2MISION_APTYPE_DAMAGE100020 },
    { 
10"Daño masivo""Realiza 2.000 de daño en 3 rondas"3MISION_APTYPE_DAMAGE200025 },
    { 
10"Daño ultra""Realiza 3.500 de daño en 6 rondas"4MISION_APTYPE_DAMAGE350030 },
    { 
10"Daño colateral""Realiza 5.000 de daño en 6 rondas"6MISION_APTYPE_DAMAGE500035 },
    { 
10"Daño devastador""Realiza 10.000 de daño en 10 rondas"10MISION_APTYPE_DAMAGE1000050 }
};

new 
g_mision_started[33];
new 
g_mision[33][MISION_INT];
new 
g_mision_stats[33][MISION_STATS];
new 
g_mision_select[33];
new 
g_mision_round[33];
new 
g_menu_mision_int[33];
new 
g_connected[33];
new 
g_alive[33];

new 
g_maxplayers;
new 
g_syncobj;

public 
plugin_init()
{
    
register_plugin("Misiones""1.0""Cristian'");
    
    
register_clcmd("say /mision""clcmd_show_mision");
    
    
register_event("HLTV""event_round_start""a""1=0""2=0");
    
    
register_menu("Show Menu Misions Description", (1<<0)|(1<<9), "handled_show_menu_mision_description");
    
register_menu("Show Mision Struct", (1<<0)|(1<<9), "handled_clcmd_show_mision_struct");
    
register_menu("Show Cancel Mision", (1<<0)|(1<<1), "handled_show_menu_cancel_mision");
    
    
RegisterHam(Ham_Spawn"player""ham_PlayerSpawn_Post"true);
    
RegisterHam(Ham_Killed"player""ham_PlayerKilled");
    
RegisterHam(Ham_TakeDamage"player""ham_TakeDamage");
    
    
g_maxplayers get_maxplayers();
    
g_syncobj CreateHudSyncObj();
    
    new 
showhud;
    
showhud create_entity("info_target");
    
    if (
is_valid_ent(showhud))
    {
        
entity_set_string(showhudEV_SZ_classnameSHOWHUD_CLASSNAME);
        
entity_set_float(showhudEV_FL_nextthinkget_gametime() + 1.0);
        
        
register_think(SHOWHUD_CLASSNAME"ent_showHUD");
    }    
    
    
set_task(30.0"print_mision");
}

public 
print_mision()
{
    
chat_color(0"%s !yEscribí !g/mision!y para comenzar una misión."SZPREFIX);
    
set_task(random_float(60.0180.0), "print_mision");
}

public 
client_putinserver(id)
{
    
g_connected[id] = 1;
}

public 
client_disconnect(id)
{
    
g_connected[id] = 0;
    
g_alive[id] = 0;
}

public 
event_round_start()
{
    static 
id;
    
    for (
id 1id <= g_maxplayersid++)
    {
        if (!
g_connected[id])
            continue;
        
        if (
g_mision_started[id])
        {
            
g_mision_round[id]++;
            
            if (
g_mision_round[id] == MISIONS[g_mision_select[id]][MISION_ROUNDS])
            {
                
chat_color(id"%s !yLa misión !g%s!y fue finalizada."SZPREFIXMISIONS[g_mision_select[id]][MISION_NAME]);
                
reset_check_mision(id);
            }
        }
    }
}

public 
ent_showHUD(ent)
{
    static 
iduser;
    
    for (
id 1id <= g_maxplayersid++)
    {
        if (!
g_connected[id])
            continue;
        
        
user id;
        
        if (
id == user)
        {
            static 
mision[200];
            
            if (
g_mision_started[id])
            {
                static 
text[58];
                
                switch(
MISIONS[g_mision_select[id]][MISION_CHECK])
                {
                    case 
TYPE_KILLformat(textcharsmax(text), "Asesinatos: %d / %d"g_mision_stats[id][MISION_KILLED], MISIONS[g_mision_select[id]][MISION_LIMIT]);
                    case 
TYPE_KILL_HSformat(textcharsmax(text), "Asesinados con headshot: %d / %d"g_mision_stats[id][MISION_KILLED_HS_PER_ROUND], MISIONS[g_mision_select[id]][MISION_LIMIT]);
                    case 
TYPE_KNIFEformat(textcharsmax(text), "Asesinados con cuhillo: %d / %d"g_mision_stats[id][MISION_KILLED_PER_KNIFE], MISIONS[g_mision_select[id]][MISION_LIMIT]);
                    case 
TYPE_DAMAGE
                    {
                        static 
dmg_mision[15], dmg_limit[15];
                        
                        
addpoint(g_mision_stats[id][MISION_DAMAGE_PER_ROUND], dmg_mision14);
                        
addpoint(MISIONS[g_mision_select[id]][MISION_LIMIT], dmg_limit14);
                        
                        
                        
format(textcharsmax(text), "Daño: %s / %s"dmg_misiondmg_limit);
                    }
                }
                
                
format(misioncharsmax(mision), "Misión: %s^nRondas: %d / %d^nRecompensa: +%d %s^n%s"MISIONS[g_mision_select[id]][MISION_NAME], g_mision_round[id], MISIONS[g_mision_select[id]][MISION_ROUNDS], MISIONS[g_mision_select[id]][MISION_REWARD], MISIONS_CLASS[g_menu_mision_int[id]], text);
                
            }
            
            
set_hudmessage(025500.080.0816.01.10.00.0, -1);
            
ShowSyncHudMsg(idg_syncobj"%s", (g_mision_started[id]) ? mision "No se seleccionó ninguna misión");
        }
    }
    
    
entity_set_float(entEV_FL_nextthinkget_gametime() + 1.0);
}

public 
ham_PlayerSpawn_Post(id)
{
    if (!
is_user_alive(id) || cs_get_user_team(id) == CS_TEAM_SPECTATOR || cs_get_user_team(id) == CS_TEAM_UNASSIGNED)
        return 
HAM_IGNORED;
    
    
g_alive[id] = _:is_user_alive(id);
    return 
HAM_IGNORED;
}

public 
ham_PlayerKilled(victimattackershouldgib)
{
    if (
victim == attacker || !is_user_valid_connected(attacker))
        return;
    
    
g_alive[victim] = 0;
    
    if (
g_mision_started[attacker])
    {
        switch(
g_mision_select[attacker])
        {
            case 
PLOMO_POR_1: { g_mision_stats[attacker][MISION_KILLED]++; if (g_mision_stats[attacker][MISION_KILLED] == 1set_mision(attackerPLOMO_POR_1); }
            case 
PLOMO_POR_5: { g_mision_stats[attacker][MISION_KILLED]++; if (g_mision_stats[attacker][MISION_KILLED] == 5set_mision(attackerPLOMO_POR_5); }
            case 
PLOMO_POR_10: { g_mision_stats[attacker][MISION_KILLED]++; if (g_mision_stats[attacker][MISION_KILLED] == 10set_mision(attackerPLOMO_POR_10); }
            case 
PLOMO_POR_20: { g_mision_stats[attacker][MISION_KILLED]++; if (g_mision_stats[attacker][MISION_KILLED] == 20set_mision(attackerPLOMO_POR_20); }
            case 
HEAD_X5: { if (get_pdata_int(victim75) == HIT_HEAD) { g_mision_stats[attacker][MISION_KILLED_HS_PER_ROUND]++; if (g_mision_stats[attacker][MISION_KILLED_HS_PER_ROUND] == 5set_mision(attackerHEAD_X5); }}
            case 
HEAD_X10: { if (get_pdata_int(victim75) == HIT_HEAD) { g_mision_stats[attacker][MISION_KILLED_HS_PER_ROUND]++; if (g_mision_stats[attacker][MISION_KILLED_HS_PER_ROUND] == 10set_mision(attackerHEAD_X10); }}
            case 
SIN_CASCO: { if (get_pdata_int(victim75) == HIT_HEAD) { g_mision_stats[attacker][MISION_KILLED_HS_PER_ROUND]++; if (g_mision_stats[attacker][MISION_KILLED_HS_PER_ROUND] == 20set_mision(attackerSIN_CASCO); }}
            case 
ACUCHILLANDO: { if (get_user_weapon(attacker) == CSW_KNIFE) { g_mision_stats[attacker][MISION_KILLED_PER_KNIFE]++; if (g_mision_stats[attacker][MISION_KILLED_PER_KNIFE] == 3set_mision(attackerACUCHILLANDO); }}
            case 
FILO_X5: { if (get_user_weapon(attacker) == CSW_KNIFE) { g_mision_stats[attacker][MISION_KILLED_PER_KNIFE]++; if (g_mision_stats[attacker][MISION_KILLED_PER_KNIFE] == 5set_mision(attackerFILO_X5); }}
            case 
FILO_A_LA_DECIMA_POTENCIA: { if (get_user_weapon(attacker) == CSW_KNIFE) { g_mision_stats[attacker][MISION_KILLED_PER_KNIFE]++; if (g_mision_stats[attacker][MISION_KILLED_PER_KNIFE] == 10set_mision(attackerFILO_A_LA_DECIMA_POTENCIA); }}
            case 
FILO_AL_VEINTE_VEINTE: { if (get_user_weapon(attacker) == CSW_KNIFE) { g_mision_stats[attacker][MISION_KILLED_PER_KNIFE]++; if (g_mision_stats[attacker][MISION_KILLED_PER_KNIFE] == 20set_mision(attackerFILO_AL_VEINTE_VEINTE); }}
        }
    }
}

public 
ham_TakeDamage(victiminflictorattackerFloat:damagedamage_type)
{
    if (
victim == attacker || !is_user_valid_connected(attacker))
        return 
HAM_IGNORED;
    
    if (
g_mision_started[attacker] && MISIONS[g_mision_select[attacker]][MISION_CHECK] == TYPE_DAMAGE)
    {
        
g_mision_stats[attacker][MISION_DAMAGE_PER_ROUND] += floatround(damage);
        
        static 
i;
        
        for (
0sizeof(MISIONS); i++)
        {
            if (
MISIONS[g_mision_select[attacker]][MISION_CHECK] != TYPE_DAMAGE)
                continue;
            
            if (
g_mision_select[attacker] >= MISIONS[g_mision_select[attacker]][MISION_REWARD])
                
set_mision(attackerg_mision_select[attacker]);
        }
    }
    
    return 
HAM_IGNORED;
}

public 
clcmd_show_mision(id)
{
    if (
g_mision_started[id])
    {
        static 
menu[256];
        
formatex(menucharsmax(menu), "\yMisiones^n^n\yMisión: \w%s^n\yRondas: \w%d \y/ \w%d^n\yRecompensa: \w+%d %s^n^n\r1. \wCancelar la misión^n\r0. \wVolver"
        
MISIONS[g_mision_select[id]][MISION_NAME], g_mision_round[id], MISIONS[g_mision_select[id]][MISION_ROUNDS], MISIONS[g_mision_select[id]][MISION_REWARD], MISIONS_CLASS[g_menu_mision_int[id]]);
    
        
show_menu(id, (1<<0)|(1<<9), menu, -1"Show Mision Struct");
        return 
PLUGIN_HANDLED;
    }

    static 
position[3], menuitext[32];
    
menu menu_create("\yMisiones""handled_clcmd_show_misions");
    
    for (
0sizeof(MISIONS_CLASS); i++)
    {
        
format(textcharsmax(text), "Misión por %s"MISIONS_CLASS[i]);
        
num_to_str(iposition2);
        
menu_additem(menutextposition);
    }
    
    
menu_setprop(menuMPROP_BACKNAME"Atrás");
    
menu_setprop(menuMPROP_NEXTNAME"Siguiente");
    
menu_setprop(menuMPROP_EXITNAME"Volver");
    
    
menu_display(idmenu);
    
    return 
PLUGIN_HANDLED;
}

public 
handled_clcmd_show_mision_struct(idkey)
{
    if (!
key)
        
show_menu_cancel_mision(id);
    
    return 
PLUGIN_HANDLED;
}

show_menu_cancel_mision(id)
{
    static 
menu[128];
    
formatex(menucharsmax(menu), "\y¿Estás seguro de cancelar la misión \w%s\y?^n^n\r1. \wSí, cancelar la misión^n\r2. \wNo^n"MISIONS[g_mision_select[id]][MISION_NAME]);
    
    
show_menu(id, (1<<0)|(1<<1), menu, -1"Show Cancel Mision");
}

public 
handled_show_menu_cancel_mision(idkey)
{
    if (!
key)
    {
        static 
name[32];
        
get_user_name(idnamecharsmax(name));
        
        
chat_color(0"%s !g%s!y canceló la misión !g%s!y."SZPREFIXnameMISIONS[g_mision_select[id]][MISION_NAME]);
        
reset_check_mision(id);
    }
    else 
        return 
PLUGIN_HANDLED;
    
    return 
PLUGIN_HANDLED;
}

public 
handled_clcmd_show_misions(idmenuitem)
{
    if (!
g_connected[id])
    {
        
menu_destroy(menu);
        return 
PLUGIN_HANDLED;
    }
    
    if (
item == MENU_EXIT)
    {
        
menu_destroy(menu);
        return 
PLUGIN_HANDLED;
    }
    
    static 
buffer[3], dummyitemid;
    
menu_item_getinfo(menuitemdummybuffercharsmax(buffer), __dummy);
    
    
itemid str_to_num(buffer);
    
menu_destroy(menu);
    
    
show_menu_misions(iditemid);
    return 
PLUGIN_HANDLED;
}

show_menu_misions(idiclass)
{
    static 
text[128], position[4], menui;
    
    
formatex(textcharsmax(text), "\yMisión por \w%s"MISIONS_CLASS[iclass]);
    
menu menu_create(text"handled_show_menu_misions");
    
    for (
0sizeof(MISIONS); i++)
    {
        if (
iclass != MISIONS[i][MISION_TYPE])
            continue;
        
        
num_to_str(iposition3);
        
formatex(textcharsmax(text), "%s%s %s", (!g_mision[id][i]) ? "\w" "\d"MISIONS[i][MISION_NAME], (!g_mision[id][i]) ? "" "\y[COMPLETADA]");
        
menu_additem(menutextposition);
    }
    
    
menu_setprop(menuMPROP_BACKNAME"Atrás");
    
menu_setprop(menuMPROP_NEXTNAME"Siguiente");
    
menu_setprop(menuMPROP_EXITNAME"Volver");
    
    
g_menu_mision_int[id] = iclass;
    
    
menu_display(idmenu);
}

public 
handled_show_menu_misions(idmenuitem)
{
    if (!
g_connected[id])
    {
        
menu_destroy(menu);
        return 
PLUGIN_HANDLED;
    }
    
    if (
item == MENU_EXIT)
    {
        
menu_destroy(menu);
        
clcmd_show_mision(id);
        return 
PLUGIN_HANDLED;
    }
    
    static 
buffer[4], dummyitemid;
    
    
menu_item_getinfo(menuitemdummybuffercharsmax(buffer), __dummy);
    
menu_destroy(menu);
    
    
itemid str_to_num(buffer);
    
    
show_menu_misions_description(iditemid);
    return 
PLUGIN_HANDLED;
}

public 
show_menu_misions_description(idmision
{
    static 
users[128];
    static 
menu[300];
    static 
len;
    
len 0;
    
    if (
MISIONS[mision][MISION_PLAYERS])
        
formatex(users51"\yRequisitos: \w+%d jugadores conectados^n"MISIONS[mision][MISION_PLAYERS]);
    
    
len += formatex(menu[len], charsmax(menu) - len"%s%s^n^n^n\yDescripción:^n\w%s^n%s^n\yRondas: \w%d^n\yRecompensa: \w+%d %s^n^n^n\r1. \wComenzar misión^n\r0. \wVolver"
    (!
g_mision[id][mision]) ? "\d" "\y"MISIONS[mision][MISION_NAME], MISIONS[mision][MISION_DESCRIPTION],
    (!
MISIONS[mision][MISION_PLAYERS]) ? "" usersMISIONS[mision][MISION_ROUNDS], MISIONS[mision][MISION_REWARD], MISIONS_CLASS[g_menu_mision_int[id]]);
    
    
show_menu(id, (1<<0)|(1<<9), menu, -1"Show Menu Misions Description");
    
    
g_mision_select[id] = mision;
    return 
PLUGIN_HANDLED;
}

public 
handled_show_menu_mision_description(idkey)
{
    if (!
g_connected[id])
        return 
PLUGIN_HANDLED;
    
    if (
key == 0)
    {
        static 
mision;
        
mision g_mision_select[id];
    
        if (
g_mision[id][mision])
        {
            
chat_color(id"%s !yEsta misión ya está completada."SZPREFIX);
            
show_menu_misions_description(idmision);
            return 
PLUGIN_HANDLED;
        }
        
        if (
get_playing() < MISIONS[mision][MISION_PLAYERS])
        {
            
chat_color(id"%s !yNo hay suficientes jugadores para comenzar esta misión."SZPREFIX);
            
show_menu_misions_description(idmision);
            return 
PLUGIN_HANDLED;
        }
        
        static 
name[32];
        
get_user_name(idnamecharsmax(name));
        
        
chat_color(0"%s !g%s!y comenzó la misión !g%s!y."SZPREFIXnameMISIONS[mision][MISION_NAME]);
        
chat_color(id"%s !yComenzaste la misión !g%s!y, Tenés !g%d ronda%s!y para completarla."SZPREFIXMISIONS[mision][MISION_NAME], MISIONS[mision][MISION_ROUNDS], (MISIONS[mision][MISION_ROUNDS] == 1) ? "" "s");
        
g_mision_started[id] = 1;
    }
    else if (
key == 9)
        
show_menu_misions(idg_menu_mision_int[id]);
    
    return 
PLUGIN_HANDLED;
}

set_mision(idmisionusers 1)
{
    if (
g_mision[id][mision])
        return;
    
    if (
MISIONS[mision][MISION_PLAYERS] && users)
    {
        if (
get_playing() < MISIONS[mision][MISION_PLAYERS])
            return;
    }
    
    static 
name[32];
    
get_user_name(idnamecharsmax(name));
    
    
g_mision[id][mision] = 1;
    
    switch(
g_menu_mision_int[id])
    {
        case 
MISION_MONEYcs_set_user_money(idcs_get_user_money(id) + MISIONS[mision][MISION_REWARD]);
        case 
MISION_HEALTHentity_set_float(idEV_FL_healthentity_get_float(idEV_FL_health) + MISIONS[mision][MISION_REWARD]);
        case 
MISION_APentity_set_float(idEV_FL_armorvalueentity_get_float(idEV_FL_armorvalue) + MISIONS[mision][MISION_REWARD]);
    }
    
    
chat_color(0"%s !t%s!y completó la misión !g%s!y !t(+%d %s)."SZPREFIXnameMISIONS[mision][MISION_NAME], MISIONS[mision][MISION_REWARD], MISIONS_CLASS[g_menu_mision_int[id]]);
    
reset_check_mision(id);
}

reset_check_mision(id)
{
    
g_mision_round[id] = 0;
    
g_mision_select[id] = 0;
    
g_mision_started[id] = 0;
    
    static 
i;
    
    for (
0MISION_STATSi++) 
        
g_mision_stats[id][i] = 0;
}

get_playing()
{
    static 
playingidCsTeams:team;    
    
playing 0;
    
    for (
id 1id <= g_maxplayersid++)
    {
        if (
g_connected[id])
        {
            
team cs_get_user_team(id);
            
            if (
team != CS_TEAM_SPECTATOR && team != CS_TEAM_UNASSIGNED)
                
playing++;
        }
    }
    
    return 
playing;
}

stock addpoint(const numbersOutPut[], const len)
{
    new 
sTemp[15];
    new 
iOutputPos;
    new 
iNumPos;
    new 
iNumLen num_to_str(numbersTemp14);
    
    while((
iNumPos iNumLen) && (iOutputPos len)) 
    {
        
sOutPut[iOutputPos++] = sTemp[iNumPos++];
        
        if ((
iNumLen iNumPos) && !((iNumLen iNumPos) % 3))
            
sOutPut[iOutputPos++] = '.';
    }
    
    
sOutPut[iOutputPos] = EOS;
    
    return 
iOutputPos;
}

stock chat_color(id, const input[], any:...)
{
    static 
message[191];
    
vformat(message190input3);
    
    
replace_all(message190"!g""^4");
    
replace_all(message190"!t""^3");
    
replace_all(message190"!y""^1");
    
    
message_begin((id) ? MSG_ONE_UNRELIABLE MSG_BROADCASTget_user_msgid("SayText"), .player id);
    
write_byte((id) ? id 33);
    
write_string(message);
    
message_end();




RE: Misiones - Valentina. - 21/06/2018

Lindo aporte, se agradece !


RE: Misiones - Yoshi Saw - 21/06/2018

Me ahorras trabajo, te lo agradezco.


RE: Misiones - Kross - 21/06/2018

Buena aporte!, felicidades ! Gran sonrisa


RE: Misiones - Skylar - 22/06/2018

(21/06/2018, 09:01 PM)Chema escribió: Lindo aporte, se agradece !



RE: Misiones - El pirucho XP-007 - 22/06/2018

Rainbow Buen aporte, gracias a esto e podido mejorar un poco el ZTH y el CTF.


(21/06/2018, 09:26 PM)Yoshi Saw escribió: Me ahorras trabajo, te lo agradezco.


(21/06/2018, 09:01 PM)Chema escribió: Lindo aporte, se agradece !