Zet_ Publicado 31 de diciembre del 2023 Denunciar Publicado 31 de diciembre del 2023 (editado) Descripcion: - Fuera de lo que hace normalmente este plugin, le muestra un HUD a los Traidores/Detectives diciendoles los compañeros vivos que tienen o en su defecto que son el unico Traidor/Detective vivo. (Cada uno por su color ROJO/AZUL) Este se podría visualizar de ésta manera: Ademas se le puede implementar un texto debajo de los datos, como una especie de "mini guía" para los que todavía no está n tan familiarizados con el juego. #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; new len = 0; 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]); } } } Lo unico que tendrian que fijarse es la posicion X e Y del HUD. et_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); Editado 31 de diciembre del 2023 por Zet_ Hiro reaccionó a esto 1
Tλno Publicado 31 de diciembre del 2023 Denunciar Publicado 31 de diciembre del 2023 No apoyo, seria contamianar la pantalla visualmente con un HUD innecesario, cuando tranquilamente pueden abrir el TAB y fijarse. Y segundo, si te muestra que Detectives quedan vivos(Siendo DT), sabrias si hay un DT falso o no SyraXz y Hiro reaccionaron a esto 1 1
Zet_ Publicado 31 de diciembre del 2023 Autor Denunciar Publicado 31 de diciembre del 2023 hace 9 minutos, Tλno dijo: No apoyo, seria contamianar la pantalla visualmente con un HUD innecesario, cuando tranquilamente pueden abrir el TAB y fijarse. Y segundo, si te muestra que Detectives quedan vivos(Siendo DT), sabrias si hay un DT falso o no Se podría optar por limitarse a ver solo a los compañeros TTs que sigan vivos. Hiro reaccionó a esto 1
Zamasu. Publicado 5 de enero Denunciar Publicado 5 de enero Buenas. Como dijeron arriba, sería contaminar visualmente la pantalla por algo que es tan fácil de compensar como tocar el tabulador 3 segundos y ver en el apartado de CT quienes son tus compañeros, además, pierde el sentido que un HUD me diga qué compañeros quedan vivos y quienes no ya que es parte del modo el especular si X players (detectives o traidores) quedan vivos hasta que los marquen o los veas, para poder manejarse con más o menos cautela al momento de jugar la ronda, sin mencionar que puede sobreponerse el hecho de que haya un DT falso y el HUD lo delataría. Gracias por la sugerencia pero será rechazada. LowJP, SyraXz y Hiro reaccionaron a esto 2 1
Posts recomendados