Ir al contenido
  • Crear una cuenta

(#05 Mata al Traidor) [SUG] TTT - Plugins


Vergasaurio

Posts recomendados

Hola, vengo a hacer sugerencias con respecto al TTT, yo antes configuraba algunos (deje de scriptear hace rato) aunque ya borré el modo completo que tenia algunos plugins me quedaron, mis sugerencias son las siguientes para agregar/modificar

 

- Arma dorada:

-- Cuando un detective marque a un traidor no aparezca en el say que fue probado traidor 

-- Cuando un detective marque a un traidor el glow (rojo) solo le dure unos segundos

( esto permite que el traidor se aleje y no sea tan evidente que terminó la ronda para él)

- Hud para traidores/detectives

-- Un Hud que aparezca con sus respectivos compañeros (dejo el codigo)

#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <amx_settings_api>
#include <ttt>

new const g_szDSprite[] = "sprites/ttt/team_d.spr";
new const g_szTSprite[] = "sprites/ttt/team_t.spr";

new cvar_show_health;
new g_iBodyEnts[33], g_iBodyCount, Float:g_fShowTime[33];
new g_iStatusSync, g_iKarmaSync, g_pDetectiveSpr, g_pTraitorSpr, g_iActiveTarget[33];

// HUD
new g_iHudSync;
new pstate, sPlayers[129], iHealth[33], sName[33][32], iPlayers, iCount; 

public plugin_precache()
{
    new sprites[TTT_FILELENGHT];
    if(!amx_load_setting_string(TTT_SETTINGSFILE, "Player Icons", "TRAITOR", sprites, charsmax(sprites)))
    {
        amx_save_setting_string(TTT_SETTINGSFILE, "Player Icons", "TRAITOR", g_szTSprite);
        g_pTraitorSpr = precache_model(g_szTSprite);
    }
    else g_pTraitorSpr = precache_model(sprites);
    
    if(!amx_load_setting_string(TTT_SETTINGSFILE, "Player Icons", "DETECTIVE", sprites, charsmax(sprites)))
    {
        amx_save_setting_string(TTT_SETTINGSFILE, "Player Icons", "DETECTIVE", g_szDSprite);
        g_pDetectiveSpr = precache_model(g_szDSprite);
    }
    else g_pDetectiveSpr = precache_model(sprites);
}

public plugin_init()
{
    register_plugin("[TTT] Special player info", TTT_VERSION, TTT_AUTHOR);
    cvar_show_health = my_register_cvar("ttt_show_health", "1", "Should show health if aimed on player? (Default: 1)");
    
    register_event("StatusValue", "Event_StatusValue_S", "be", "1=2", "2!0");
    register_event("StatusValue", "Event_StatusValue_H", "be", "1=1", "2=0");
    
    g_iStatusSync = CreateHudSyncObj();
    g_iKarmaSync = CreateHudSyncObj();
    // HUD
    g_iHudSync = CreateHudSyncObj();
}

public client_putinserver(id)
{
    set_task(1.0, "show_status", id, _, _, "b");
}

public client_disconnect(id)
{
    if(task_exists(id))
        remove_task(id);
}

public ttt_gamemode(gamemode)
{
    if(gamemode == GAME_ENDED)
    {
        for(new i = 0; i < g_iBodyCount; i++)
            g_iBodyEnts[i] = false;
        g_iBodyCount = 0;
    }
}

public ttt_spawnbody(owner, ent)
{
    g_iBodyEnts[g_iBodyCount] = ent;
    g_iBodyCount++;
}

// public client_PostThink(id)
// {
//     if(!is_user_alive(id) || g_fShowTime[id] > get_gametime() || ttt_return_check(id))
//         return;

//     g_fShowTime[id] = get_gametime() + 1.0;
//     new ent = find_dead_body_1d(id, g_iBodyEnts, g_iBodyCount);
//     if(ent)
//     {
//         new target = entity_get_int(ent, EV_INT_iuser1);
//         if(!is_user_connected(target) || is_user_alive(target))
//             return;

//         new R, G = 50, B;
//         static out[64];
//         if(ttt_get_playerdata(target, PD_IDENTIFIED))
//         {
//             new killedstate = ttt_get_playerdata(target, PD_KILLEDSTATE);
//             R = g_iTeamColors[killedstate][0];
//             G = g_iTeamColors[killedstate][1];
//             B = g_iTeamColors[killedstate][2];
//             static name[32];
//             get_user_name(target, name, charsmax(name));
//             formatex(out, charsmax(out), "[%L] %s", id, special_names[killedstate], name);
//         }
//         else
//         {
//             R = 255;
//             G = 222;
//             if(ttt_get_playerstate(id) == PC_TRAITOR)
//                 formatex(out, charsmax(out), "%L --- [%L]", id, "TTT_UNIDENTIFIED", id, special_names[ttt_get_playerdata(target, PD_KILLEDSTATE)]);
//             else formatex(out, charsmax(out), "%L", id, "TTT_UNIDENTIFIED");
//         }

//         g_fShowTime[id] += 1.0;
//         set_hudmessage(R, G, B, -1.0, 0.60, 1, 1.0, 1.3, 0.05, 0.01, -1);
//         ShowSyncHudMsg(id, g_iStatusSync, "%s", out);
//     }
//     else
//     {
//         new body;
//         get_user_aiming(id, ent, body);
//         if(is_valid_ent(ent))
//         {
//             static classname[32];
//             entity_get_string(ent, EV_SZ_classname, classname, charsmax(classname));

//             if(equal(classname, TTT_DEATHSTATION) && ttt_get_playerstate(id) == PC_TRAITOR)
//             {
//                 new target = entity_get_int(ent, EV_INT_iuser1);
//                 if(!is_user_connected(target))
//                     return;

//                 g_fShowTime[id] += 1.0;
//                 static name[32];
//                 get_user_name(target, name, charsmax(name));
//                 set_hudmessage(g_iTeamColors[PC_TRAITOR][0], g_iTeamColors[PC_TRAITOR][1], g_iTeamColors[PC_TRAITOR][2], -1.0, 0.60, 1, 1.0, 1.3, 0.01, 0.01, -1);
//                 ShowSyncHudMsg(id, g_iStatusSync, "%s --- [%L]", name, id, "TTT_ITEM_ID8");
//             }
//         }
//     }
// }

public Event_StatusValue_S(id)
{
    if(!is_user_connected(id))
        return;
    
    new mode = ttt_get_gamemode();
    if(mode != GAME_STARTED && mode != GAME_PREPARING)
        return;
    
    static message[128], name[32], loyalties[32];
    new target = read_data(2);
    
    new targetState = ttt_get_playerstate(target), idState = ttt_get_playerstate(id), useState;
    new fakeState = ttt_get_playerdata(target, PD_FAKESTATE);
    if(fakeState && targetState != idState)
        targetState = fakeState;
    
    if(targetState == PC_DETECTIVE)
        useState = PC_DETECTIVE;
    else if(targetState == PC_TRAITOR && idState == PC_TRAITOR)
        useState = PC_TRAITOR;
    else useState = PC_INNOCENT;
    
    if(mode == GAME_PREPARING)
    {
        targetState = PC_INNOCENT;
        useState = PC_INNOCENT;
    }
    
    new loyalty = ttt_get_playerdata(target, PD_LOYALTY);
    if(loyalty)
        formatex(loyalties, charsmax(loyalties), "[%L]", id, player_loyalty[loyalty]);
    else loyalties = "";
    
    new R = g_iTeamColors[useState][0];
    new G = g_iTeamColors[useState][1];
    new B = g_iTeamColors[useState][2];
    
    new karma = ttt_get_playerdata(target, PD_KARMA);
    set_hudmessage(R, G, B, -1.0, 0.60, 1, 0.01, 3.0, 0.01, 0.01, -1);
    remove_special_sprite(id, g_iActiveTarget[id]);
    
    ttt_get_user_name(target, name, charsmax(name));
    if(get_pcvar_num(cvar_show_health))
        formatex(message, charsmax(message), "%s %s -- [Karma = %d] [HP = %d]", loyalties, name, karma, get_user_health(target));
    else formatex(message, charsmax(message), "%s %s -- [Karma = %d]", loyalties, name, karma);
    
    if((idState == PC_INNOCENT || idState == PC_DETECTIVE) && targetState != PC_DETECTIVE)
    {
        if(!ttt_get_playerdata(target, PD_HIDENAME))
            ShowSyncHudMsg(id, g_iStatusSync, "%s", message);
    }
    else if(target != g_iActiveTarget[id])
    {
        if(mode == GAME_PREPARING || mode == GAME_OFF)
            ShowSyncHudMsg(id, g_iStatusSync, "%s", message);
        else 
        {
            format(message, charsmax(message), "[%L] %s", id, special_names[targetState], message);
            ShowSyncHudMsg(id, g_iStatusSync, "%s", message);
        }
        
        if(targetState == PC_DETECTIVE)
            show_special_sprite(id, target, PC_DETECTIVE);
        else if(targetState == PC_TRAITOR && idState == PC_TRAITOR)
            show_special_sprite(id, target, PC_TRAITOR);
    }
    
    g_iActiveTarget[id] = target;
}

public Event_StatusValue_H(id)
{
    ClearSyncHud(id, g_iStatusSync);
    remove_special_sprite(id, g_iActiveTarget[id]);
}

public show_special_sprite(id, target, which)
{
    if(!is_user_connected(id) || !is_user_connected(target))
        return;
    
    message_begin(MSG_ONE, SVC_TEMPENTITY, _, id);
    write_byte(TE_PLAYERATTACHMENT);
    write_byte(target);
    write_coord(45);
    if(which == PC_TRAITOR)
        write_short(g_pTraitorSpr);
    else if(which == PC_DETECTIVE)
        write_short(g_pDetectiveSpr);
    write_short(30);
    message_end();
}

public remove_special_sprite(id, target)
{
    if(!is_user_connected(id) || !is_user_connected(target))
        return;
    
    message_begin(MSG_ONE, SVC_TEMPENTITY, _, id);
    write_byte(TE_KILLPLAYERATTACHMENTS);
    write_byte(target);
    message_end();
    
    g_iActiveTarget[id] = 0;
}

public show_status(alive)
{
    new dead = alive;
    if(!is_user_alive(dead))
    {
        alive = entity_get_int(dead, EV_INT_iuser2);
        if(!is_user_alive(alive))
            return;
    }
    
    new R, G, B;
    new aliveState = ttt_get_playerstate(alive), deadState = ttt_get_playerstate(dead);
    if(deadState == PC_DEAD || deadState == PC_NONE)
    {
        R = g_iTeamColors[deadState][0];
        G = g_iTeamColors[deadState][1];
        B = g_iTeamColors[deadState][2];
    }
    else
    {
        R = g_iTeamColors[aliveState][0];
        G = g_iTeamColors[aliveState][1];
        B = g_iTeamColors[aliveState][2];
    }
    
    set_hudmessage(R, G, B, 0.02, 0.9, 0, 6.0, 1.1, 0.0, 0.0, -1);
    new karma = ttt_get_playerdata(alive, PD_KARMA);
    
    static loyalties[32];
    new loyalty = ttt_get_playerdata(alive, PD_LOYALTY);
    if(loyalty)
        formatex(loyalties, charsmax(loyalties), "[%L]", alive, player_loyalty[loyalty]);
    else loyalties = "";
        
    if(deadState == PC_DEAD || deadState == PC_NONE)
        ShowSyncHudMsg(dead, g_iKarmaSync, "%s [Karma = %d]", loyalties, karma);
    else if(aliveState != PC_DETECTIVE && aliveState != PC_TRAITOR)
        ShowSyncHudMsg(alive, g_iKarmaSync, "%s [Karma = %d] [%L]", loyalties, karma, alive, special_names[aliveState]);
    else
    {
        ShowSyncHudMsg(alive, g_iKarmaSync, "%s [Karma = %d] [%L] [Credits = %d]", loyalties, karma, alive, special_names[aliveState], ttt_get_playerdata(alive, PD_CREDITS));
        info_ttt_mod(alive);
        set_hudmessage(g_iTeamColors[pstate][0], g_iTeamColors[pstate][1], g_iTeamColors[pstate][2], 0.3, 0.12, 0, 6.0, 1.1, 0.1, 0.1, -1);
        if(!iCount)
            ShowSyncHudMsg(alive, g_iHudSync, "Eres el unico %L vivo !", alive, special_names[pstate]);
        else
            ShowSyncHudMsg(alive, g_iHudSync, "Tienes %d compañero%s vivo%s:^n^n%s", iCount, iCount > 1 ? "s" : "", iCount > 1 ? "s" : "", sPlayers); 
    }
}

public info_ttt_mod(id)
{
    pstate = ttt_get_playerstate(id);
    if (!is_user_alive(id))
        return;
    
    iCount = 0;
    for (iPlayers = 1; iPlayers <= get_maxplayers(); iPlayers++)
    {
        if (!is_user_alive(iPlayers) || id == iPlayers) 
            continue;
        
        if((pstate == PC_DETECTIVE && ttt_get_playerstate(iPlayers) == PC_DETECTIVE && ttt_get_playerstate(iPlayers) != PC_TRAITOR) 
        || (pstate == PC_TRAITOR && ttt_get_playerstate(iPlayers) == PC_TRAITOR && ttt_get_playerstate(iPlayers) != PC_DETECTIVE))
        {
            iHealth[iPlayers] = get_user_health(iPlayers);
            get_user_name(iPlayers, sName[iPlayers], charsmax(sName[]));
        
            iCount++;

            len += formatex(sPlayers[len], charsmax(sPlayers) - len, "%s [HP: %d]^n", sName[iPlayers], iHealth[iPlayers]); 
        }
    }
} 

 

como se veria:

 JvGOuk0.png

 

por ahora esto, no recuerdo ningun otro, cualquier duda o sugerencia la acepto...

  • Me gusta 3
Enlace al comentario
Compartir en otros sitios

Apoyo lo del hud pero lo del arma dorada no estoy de acuerdo porque una el traidor tranquilamente puede "evitar ser marcado" y la otra ponele el glow dure poco, el detective lo marca lo pierde y serian 2 créditos al pedo porque el otro después de escaparse vuelve como si nada. Además el traidor tiene miles de formas de escapar de una situación de riesgo y sumarle eso ya sería hacerle más fácil la ronda. Salud

  • Me gusta 1
Enlace al comentario
Compartir en otros sitios

La dorada no va a ser modificada ya que los TTs cuentan con varias herramientas para escapar de una situacion en la que sean "marcados". 

En cuanto a la segunda sugerencia se hablara con mi compañero @Tydo y en caso de ser aplicada se hará un TH anunciando los cambios. 

Saludos y gracias por realizar ambas sugerencias. 

Cierro. 

Enlace al comentario
Compartir en otros sitios

  • Zurdo cambió el título a (#05 Mata al Traidor) [SUG] TTT - Plugins
  • ; Shadow' ツ bloqueó este tema
Invitado
Este tema se encuentra cerrado a nuevas respuestas.
  • Navegando Recientemente   0 miembros

    • No hay usuarios registrados viendo esta página
×
×
  • Crear nuevo...