Re: [TTT] Give karma
PHP Code:
#include <amxmodx> #include <fakemeta> #include <engine> #include <hamsandwich> #include <cs_teams_api> #include <timer_controller> #include <ttt> #include <amxmisc> #include <nvault>
#define TASK_SURVIVAL 1111 #define TASK_ORPHEU 2222 #define m_bitsDamageType 76 #define m_flPainShock 108 #define OFFSET_LINUX_WEAPONS 4 #define OFFSET_LINUX_PLAYERS 5
enum { KARMA_KILL, KARMA_DMG }
new const g_szGameModes[GAME_MODE][] = { "unset", "off", "preparing", "restarting", "started", "ended" };
const DMG_SOMETHING = DMG_GENERIC | DMG_SLASH | DMG_BURN | DMG_FREEZE | DMG_FALL | DMG_BLAST | DMG_SHOCK | DMG_DROWN | DMG_NERVEGAS | DMG_POISON | DMG_RADIATION | DMG_ACID; // RESETABLE new g_iGlobalInfo[GLOBAL_INFO], g_iSpecialCount[PLAYER_CLASS], g_iRoundSpecial[PLAYER_CLASS]; new g_iPlayerData[33][PLAYER_DATA]; new g_iMultiCount = 1, g_iMultiSeconds = 1; new Trie:g_tCvarsToFile, g_iTrieSize; // // NON RESETABLE new cvar_traitors, cvar_detectives, cvar_karma_damage, cvar_preparation_time, cvar_karma_multi, cvar_karma_start, cvar_credits_tra_start, cvar_credits_tra_count, cvar_credits_tra_detkill, cvar_credits_tra_countkill, cvar_credits_det_start, cvar_credits_tra_repeat, cvar_damage_modifier, cvar_credits_det_bonussurv, cvar_credits_det_survtime, cvar_show_deathmessage, cvar_detective_glow; new g_pMsgTeamInfo, g_pMsgScreenFade, g_iGameModeForward, g_iPluginCfgForward; new Float:g_fFreezeTime, Float:g_fRoundTime, Float:g_fRoundStart; new g_iMaxDetectives, g_iMaxTraitors, g_iMaxPlayers; new g_iExceptionItems[10] = {-2, -2, ...}; //
new g_iVault, g_iKarmaTime[33], new const g_szVaultName[] = "karma" new g_iCvar[2]
public plugin_init() { register_plugin("[TTT] Core", TTT_VERSION, TTT_AUTHOR); register_cvar("ttt_server_version", TTT_VERSION, FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY);
cvar_traitors = mynew_register_cvar("ttt_traitors", "4", "One Traitor on X players. (Default: 4)"); cvar_detectives = mynew_register_cvar("ttt_detectives", "6", "One Detective on X players. (Default: 6)"); cvar_preparation_time = mynew_register_cvar("ttt_preparation_time", "10", "Preparation time before game start. (Default: 10)"); cvar_credits_tra_start = mynew_register_cvar("ttt_credits_tra_start", "2", "Number of credits Traitor has when starting game. (Default: 2)"); cvar_credits_tra_count = mynew_register_cvar("ttt_credits_tra_count", "0.25", "Percentage of players to kill to get extra credits. (Default: 0.25)"); cvar_credits_tra_repeat = mynew_register_cvar("ttt_credits_tra_repeat", "1", "Repeat percentage kills till all are killed. (Default: 1)"); cvar_credits_tra_detkill = mynew_register_cvar("ttt_credits_tra_detkill", "1", "Number of credits for killing a Detective. (Default: 1)"); cvar_credits_tra_countkill = mynew_register_cvar("ttt_credits_tra_countkill", "1", "Number of credits to give for percentage kills. (Default: 1)"); cvar_credits_det_start = mynew_register_cvar("ttt_credits_det_start", "1", "Number of credits Detective has when starting game. (Default: 1)"); cvar_credits_det_bonussurv = mynew_register_cvar("ttt_credits_det_bonussurv", "1", "Number of credits to give for surviving time. (Default: 1)"); cvar_credits_det_survtime = mynew_register_cvar("ttt_credits_det_survtime", "45.0", "Every X seconds give credits. (Default: 45.0)"); cvar_karma_damage = mynew_register_cvar("ttt_karma_damage", "0.25", "Karma modifier dealing damage. (Default: 0.25)"); cvar_karma_multi = mynew_register_cvar("ttt_karma_multi", "50", "Karma modifier for killing. (Default: 50)"); cvar_karma_start = mynew_register_cvar("ttt_karma_start", "500", "Starting karma. (Default: 500)"); cvar_show_deathmessage = mynew_register_cvar("ttt_show_deathmessage", "abeg", "Show deathmessages to: a=NONE, b=TRAITOR, c=DETECTIVE, d=INNOCENT, e=DEAD, f=SPECIAL, g=victim, h=killer. (Default: abeg)"); cvar_damage_modifier = mynew_register_cvar("ttt_damage_modifier", "1.0", "Modifies karma based damage. (Default: 1.0)"); cvar_detective_glow = mynew_register_cvar("ttt_detective_glow", "1", "Should detective also be glowing? (Default: 1)");
g_pMsgScreenFade = get_user_msgid("ScreenFade"); g_pMsgTeamInfo = get_user_msgid("TeamInfo");
register_event("TextMsg", "Event_RoundRestart", "a", "2&#Game_C", "2&#Game_w"); register_event("HLTV", "Event_HLTV", "a", "1=0", "2=0"); register_event("DeathMsg", "Event_DeathMsg", "a"); register_logevent("Event_EndPreptime", 2, "1=Round_Start"); register_logevent("Event_EndRound", 2, "1=Round_End");
register_forward(FM_AddToFullPack, "Forward_AddToFullPack_post", 1);
RegisterHamPlayer(Ham_Killed, "Ham_Killed_pre", 0); RegisterHamPlayer(Ham_Killed, "Ham_Killed_post", 1); RegisterHamPlayer(Ham_TakeDamage, "Ham_TakeDamage_pre", 0); RegisterHamPlayer(Ham_TakeDamage, "Ham_TakeDamage_post", 1); RegisterHamPlayer(Ham_TraceAttack, "Ham_TraceAttack_pre", 0);
g_iGameModeForward = CreateMultiForward("ttt_gamemode", ET_IGNORE, FP_CELL); g_iPluginCfgForward = CreateMultiForward("ttt_plugin_cfg", ET_IGNORE);
g_iMaxPlayers = get_maxplayers(); #if AMXX_VERSION_NUM < 183 register_dictionary("ttt_c.txt"); register_dictionary("ttt_addons_c.txt"); #else register_dictionary("ttt.txt"); register_dictionary("ttt_addons.txt"); #endif
register_clcmd("say /karma", "karmaCmd", ADMIN_CFG) register_clcmd("say_team /karma", "karmaCmd", ADMIN_CFG)
if((g_iVault = nvault_open(g_szVaultName)) == INVALID_HANDLE) { set_fail_state("File ^"%s^" couldn't be opened", g_szVaultName) }
g_iCvar[0] = register_cvar("karma_cmd_points", "100") g_iCvar[1] = register_cvar("karma_cmd_time", "10") }
public karmaCmd(id, level, cid) { if(!cmd_access(id, level, cid, 1)) { return PLUGIN_HANDLED }
if(g_iKarmaTime[id] < get_systime()) { client_print_color(id, print_team_default, "%s You have to wait^4 %i minutes^1 to get free karma points again.", TTT_TAG, (get_systime() - g_iKarmaTime[id]) * 60); return PLUGIN_CONTINUE }
new karmaPoints = get_pcvar_num(g_iCvar[0]) new iTime = get_pcvar_num(g_iCvar[1]), szAuthID[MAX_AUTHID_LENGTH] get_user_authid(id, szAuthID, charsmax(szAuthID))
g_iKarmaTime[id] = get_systime(iTime * 60) nvault_set(g_iVault, szAuthID, fmt("%i", g_iKarmaTime[id]))
client_print_color(id, print_team_default, "%s You got^4 %i^1 karma points! You can get another^4 %i^1 after^3 %i minutes^1.", TTT_TAG, karmaPoints, karmaPoints, iTime);
return PLUGIN_CONTINUE }
public plugin_end() { nvault_close(g_iVault) set_game_state(GAME_PREPARING); }
public plugin_natives() { register_library("ttt"); register_native("ttt_get_roundtime", "_get_roundtime"); register_native("ttt_get_playerdata", "_get_playerdata"); register_native("ttt_set_playerdata", "_set_playerdata"); register_native("ttt_get_globalinfo", "_get_globalinfo"); register_native("ttt_set_globalinfo", "_set_globalinfo"); register_native("ttt_set_playerstate", "_set_playerstate"); register_native("ttt_set_gamemode", "_set_gamemode"); register_native("ttt_get_specialcount", "_get_specialcount"); register_native("ttt_register_cvar", "_register_cvar"); register_native("ttt_add_exception", "_add_exception"); register_native("ttt_find_exception", "_find_exception"); }
public plugin_cfg() { auto_exec_config(TTT_CONFIGFILE); g_fRoundTime = get_pcvar_float(get_cvar_pointer("mp_roundtime")); TrieDestroy(g_tCvarsToFile);
new ret; ExecuteForward(g_iPluginCfgForward, ret); }
public client_disconnect(id) { set_task(0.5, "reset_client", id); set_special_state(id, PC_NONE); }
public client_putinserver(id) { // if(is_user_bot(id)) // server_cmd("kick #%i %s", get_user_userid(id), "Bot player!");
reset_client(id); g_iPlayerData[id][PD_KILLEDBY] = -1; set_task(11.0, "startup_info", id);
new karma = get_pcvar_num(cvar_karma_start); g_iPlayerData[id][PD_KARMATEMP] = karma; g_iPlayerData[id][PD_KARMA] = karma;
static szAuthID[MAX_AUTHID_LENGTH], iTs, szData[12] get_user_authid(id, szAuthID, charsmax(szAuthID))
g_iKarmaTime[id] = -1
if(nvault_lookup(g_iVault, szAuthID, szData, charsmax(szData), iTs)) { g_iKarmaTime[id] = str_to_num(szData); }
}
public startup_info(id) { if(get_game_state() == GAME_STARTED && !is_user_alive(id)) { set_special_state(id, PC_DEAD); Show_All(); }
// Please don't remove this :) client_print_color(id, print_team_default, "%s Mod created by ^3%s^1, ^4skype:guskis1^1, version: ^3%s^1!", TTT_TAG, TTT_AUTHOR, TTT_VERSION); }
public Event_RoundRestart() { if(get_game_state() != GAME_RESTARTING) { reset_all(); set_game_state(GAME_RESTARTING); } }
public Event_HLTV() { if(get_game_state() != GAME_PREPARING) { new cvar = get_pcvar_num(cvar_preparation_time); if(!cvar) set_pcvar_num(cvar_preparation_time, cvar = 1); g_fFreezeTime = float(cvar); set_task(0.1, "set_timer");
g_fRoundTime = get_pcvar_float(get_cvar_pointer("mp_roundtime")); g_fRoundStart = get_gametime(); reset_all();
set_game_state(GAME_PREPARING); } }
public set_timer() RoundTimerSet(0, get_pcvar_num(cvar_preparation_time));
public Event_EndRound() { if(get_game_state() != GAME_ENDED) { reset_all(); set_game_state(GAME_ENDED); } }
public Event_EndPreptime() { if(task_exists(TASK_ORPHEU)) remove_task(TASK_ORPHEU); set_task(float(get_pcvar_num(cvar_preparation_time)), "do_the_magic", TASK_ORPHEU); }
public do_the_magic() { RoundTimerSet(floatround(g_fRoundTime));
new num; static players[32]; get_players(players, num); ttt_log_to_file(LOG_DEFAULT, "Current player count %d", num);
if(num < 3) { set_game_state(GAME_OFF); client_print_color(0, print_team_default, "%s %L", TTT_TAG, LANG_PLAYER, "TTT_MODOFF1"); return; }
new trai = get_pcvar_num(cvar_traitors), dete = get_pcvar_num(cvar_detectives); g_iMaxTraitors = (num/trai); if(!g_iMaxTraitors) g_iMaxTraitors = 1;
g_iMaxDetectives = (num/dete); if(g_iMaxTraitors+g_iMaxDetectives>num) { set_pcvar_num(cvar_detectives, 8); set_pcvar_num(cvar_traitors, 4); g_iMaxTraitors = (num/trai);
if(!g_iMaxTraitors) g_iMaxTraitors = 1; g_iMaxDetectives = (num/dete); client_print_color(0, print_team_default, "%s %L", TTT_TAG, LANG_PLAYER, "TTT_MODOFF2"); } while(specials_needed() != 0) pick_specials();
new id; for(--num; num >= 0; num--) { id = players[num]; if(!is_user_alive(id)) continue; g_iPlayerData[id][PD_KARMA] = g_iPlayerData[id][PD_KARMATEMP];
if(get_special_state(id) != PC_DETECTIVE && get_special_state(id) != PC_TRAITOR) { screen_fade(id, PC_INNOCENT); set_special_state(id, PC_INNOCENT); cs_set_player_team(id, CS_TEAM_CT, false); }
entity_set_float(id, EV_FL_frags, float(g_iPlayerData[id][PD_KARMA])); cs_set_user_deaths(id, g_iPlayerData[id][PD_KILLEDDEATHS]); }
new i; for(i = 0; i < PLAYER_CLASS; i++) g_iRoundSpecial[i] = get_special_count(i);
set_task(get_pcvar_float(cvar_credits_det_survtime), "give_survival_credits", TASK_SURVIVAL, _, _, "b"); get_players(players, num); for(--num; num >= 0; num--) { id = players[num]; set_fake_team(id, get_special_state(id)); }
set_game_state(GAME_STARTED); }
public Event_DeathMsg() { new killer = read_data(1); new victim = read_data(2); static weapon[16]; read_data(4, weapon, charsmax(weapon));
if(is_user_connected(killer)) { static newweap[32]; g_iPlayerData[victim][PD_KILLEDBY] = killer; g_iPlayerData[killer][PD_KILLCOUNT]++; formatex(newweap, charsmax(newweap), "weapon_%s", weapon); g_iPlayerData[victim][PD_KILLEDWEAP] = get_weaponid(newweap); }
static cvar[10]; get_pcvar_string(cvar_show_deathmessage, cvar, charsmax(cvar)); if(cvar[0]) ttt_make_deathmsg(killer, victim, read_data(3), weapon, read_flags(cvar));
if(equali(weapon, "worldspawn")) g_iPlayerData[victim][PD_KILLEDWEAP] = DEATHS_SUICIDE; }
public Ham_Killed_pre(victim, killer, shouldgib) { if(my_return_check(victim)) return HAM_IGNORED;
if(get_pdata_int(victim, m_bitsDamageType) & DMG_SOMETHING) add_death_info(victim, killer, get_pdata_int(victim, m_bitsDamageType, 5));
g_iPlayerData[victim][PD_KILLEDSTATE] = get_special_state(victim); g_iPlayerData[victim][PD_KILLEDTIME] = floatround(floatmul(g_fRoundTime, 60.0) - get_round_time()); g_iPlayerData[victim][PD_KILLEDDEATHS]++;
set_special_state(victim, PC_DEAD); return HAM_HANDLED; }
public add_death_info(victim, killer, dmg) { new msg = get_deathmessage(0, dmg); if(is_user_connected(killer)) { g_iPlayerData[victim][PD_KILLEDBY] = killer; g_iPlayerData[killer][PD_KILLCOUNT]++; } else g_iPlayerData[victim][PD_KILLEDBY] = msg;
g_iPlayerData[victim][PD_KILLEDWEAP] = msg; }
public get_deathmessage(id, dmg) { if(!id) { if(dmg & DMG_GENERIC) dmg = DEATHS_GENERIC; else if(dmg & DMG_SLASH) dmg = DEATHS_SLASH; else if(dmg & DMG_BURN) dmg = DEATHS_BURN; else if(dmg & DMG_FREEZE) dmg = DEATHS_FREEZE; else if(dmg & DMG_FALL) dmg = DEATHS_FALL; else if(dmg & DMG_BLAST) dmg = DEATHS_BLAST; else if(dmg & DMG_SHOCK) dmg = DEATHS_SHOCK; else if(dmg & DMG_DROWN) dmg = DEATHS_DROWN; else if(dmg & DMG_NERVEGAS) dmg = DEATHS_NERVEGAS; else if(dmg & DMG_POISON) dmg = DEATHS_POISON; else if(dmg & DMG_RADIATION) dmg = DEATHS_RADIATION; else if(dmg & DMG_ACID) dmg = DEATHS_ACID; else dmg = DEATHS_SUICIDE; } else dmg = g_iPlayerData[id][PD_KILLEDWEAP];
return dmg; }
public Ham_Killed_post(victim, killer, shouldgib) { if(my_return_check(victim)) return;
if(!is_user_connected(killer)) { killer = find_valid_killer(victim, killer); }
new bonus; static players[32], name[32]; if(float(get_special_count(PC_DEAD)+get_special_count(PC_TRAITOR)-g_iRoundSpecial[PC_TRAITOR])/float(g_iRoundSpecial[PC_INNOCENT]+g_iRoundSpecial[PC_DETECTIVE]) > get_pcvar_float(cvar_credits_tra_count) * g_iMultiCount) { new num, i; bonus = get_pcvar_num(cvar_credits_tra_countkill); get_players(players, num, "a"); for(--num; num >= 0; num--) { i = players[num];
if(get_special_state(i) == PC_TRAITOR) { g_iPlayerData[i][PD_CREDITS] += bonus; client_print_color(i, print_team_default, "%s %L", TTT_TAG, i, "TTT_AWARD1", bonus, floatround(get_pcvar_float(cvar_credits_tra_count)* g_iMultiCount*100), i, special_names[PC_INNOCENT]); } }
if(get_pcvar_num(cvar_credits_tra_repeat)) g_iMultiCount++; else g_iMultiCount = 100; }
if(is_user_connected(killer)) { new killer_state = get_special_alive(killer), victim_state = get_special_alive(victim); if(killer_state == PC_TRAITOR && victim_state == PC_DETECTIVE) { bonus = get_pcvar_num(cvar_credits_tra_detkill); g_iPlayerData[killer][PD_CREDITS] += bonus; get_user_name(victim, name, charsmax(name)); client_print_color(killer, print_team_default, "%s %L", TTT_TAG, killer, "TTT_AWARD2", bonus, killer, special_names[PC_DETECTIVE], name); }
if(killer != victim) { get_user_name(victim, name, charsmax(name)); if(killer_state == PC_INNOCENT || killer_state == PC_DETECTIVE) client_print_color(killer, print_team_default, "%s %L", TTT_TAG, killer, "TTT_KILLED2", name); else if(killer_state == PC_TRAITOR || victim_state == PC_TRAITOR) client_print_color(killer, print_team_default, "%s %L", TTT_TAG, killer, "TTT_KILLED3", name, killer, special_names[victim_state]);
get_user_name(killer, name, charsmax(name)); client_print_color(victim, print_team_default, "%s %L", TTT_TAG, victim, "TTT_KILLED1", name, victim, special_names[killer_state]); } }
new killed_item = killed_with_item(victim); if(killed_item) { if(is_user_connected(killer)) { if(victim != killer && get_special_alive(killer) != get_special_alive(victim)) karma_modifier(killer, victim, KARMA_KILL); } } else karma_modifier(killer, victim, KARMA_KILL);
if(!killed_item && (!is_user_connected(killer) || killer == victim)) client_print_color(victim, print_team_default, "%s %L", TTT_TAG, victim, "TTT_SUICIDE");
set_task(0.1, "Show_All"); }
public find_valid_killer(victim, killer) { new new_killer = get_player_data(victim, PD_KILLEDBY); return new_killer ? new_killer : killer; }
public killed_with_item(victim) { new item = get_player_data(victim, PD_KILLEDBYITEM); static const size = sizeof(g_iExceptionItems); for(new i = 0; i < size; i++) { if(g_iExceptionItems[i] == item) return 1; }
return 0; }
public Show_All() { if(get_game_state() == GAME_STARTED) { new num, i, specstate; static players[32]; get_players(players, num); for(--num; num >= 0; num--) { i = players[num];
specstate = get_special_state(i); if(specstate == PC_DEAD || specstate == PC_NONE) { set_attrib_special(i, 1, PC_TRAITOR, PC_NONE, PC_DEAD); if(!g_iPlayerData[i][PD_SCOREBOARD]) set_attrib_special(i, 0, PC_INNOCENT, PC_DETECTIVE); } } } }
public Ham_TakeDamage_pre(victim, inflictor, attacker, Float:damage, bits) { if(!my_return_check(attacker)) { new Float:modifier = g_iPlayerData[attacker][PD_KARMA]/1000.0; if(modifier > 0.05 && damage > 0.1) { damage *= (modifier*get_pcvar_float(cvar_damage_modifier)); if(cs_get_user_team(attacker) != cs_get_user_team(victim)) damage *= 0.35;
if(damage < 1.0) damage = 1.0; } else damage = 0.0;
SetHamParamFloat(4, damage); return HAM_HANDLED; }
return HAM_IGNORED; }
public Ham_TakeDamage_post(victim, inflictor, attacker, Float:damage, bits) { if(!my_return_check(attacker)) { if(damage > 0.1) { if(victim != attacker) karma_modifier(attacker, victim, KARMA_DMG); } else set_pdata_float(victim, m_flPainShock, 1.0, OFFSET_LINUX_PLAYERS); } }
public Ham_TraceAttack_pre() { if(get_game_state() != GAME_STARTED && get_game_state() != GAME_OFF) return HAM_SUPERCEDE;
return HAM_IGNORED; }
public Forward_AddToFullPack_post(es_handle, e, ent, host, hostflags, id, pSet) { if(id && host != ent && is_user_connected(host) && is_user_connected(ent) && get_orig_retval()) { static cvar; if(!cvar) cvar = get_pcvar_num(cvar_detective_glow);
new entTeam = get_special_alive(ent); if(entTeam != PC_INNOCENT) { new hostTeam = get_special_alive(host); new fakeTeam = get_player_data(ent, PD_FAKESTATE); if(fakeTeam && hostTeam != entTeam) entTeam = fakeTeam; if(hostTeam == PC_TRAITOR || ((hostTeam == PC_DETECTIVE || hostTeam == PC_INNOCENT) && entTeam != PC_TRAITOR && cvar)) { set_es(es_handle, ES_RenderFx, kRenderFxGlowShell); set_es(es_handle, ES_RenderColor, g_iTeamColors[entTeam]); set_es(es_handle, ES_RenderAmt, 35); } } } }
public pick_specials() { new id, num; static players[32]; static name[32];
get_players(players, num);
while(id == 0) { id = players[random(num)]; if(get_special_state(id) == PC_TRAITOR || get_special_state(id) == PC_DETECTIVE) id = 0; }
new randomNum = specials_needed(); get_user_name(id, name, charsmax(name)); switch(randomNum) { case PC_TRAITOR: { g_iPlayerData[id][PD_CREDITS] = get_pcvar_num(cvar_credits_tra_start); set_special_state(id, randomNum);
screen_fade(id, randomNum); ttt_log_to_file(LOG_DEFAULT, "[%L] %s choosen (ID:%d)", id, special_names[randomNum], name, id); cs_set_player_team(id, CS_TEAM_T, false); } case PC_DETECTIVE: { if(num >= get_pcvar_num(cvar_detectives)) { g_iPlayerData[id][PD_CREDITS] = get_pcvar_num(cvar_credits_det_start); set_special_state(id, randomNum);
screen_fade(id, randomNum); ttt_log_to_file(LOG_DEFAULT, "[%L] %s choosen (ID:%d)", id, special_names[randomNum], name, id); cs_set_player_team(id, CS_TEAM_CT, false); } } case PC_NONE: return; } }
stock screen_fade(id, player_state) { message_begin(MSG_ONE_UNRELIABLE, g_pMsgScreenFade, _, id); write_short(FixedUnsigned16(1.0, 1<<12)); write_short(0); write_short((SF_FADE_MODULATE)); //flags (SF_FADE_IN + SF_FADE_ONLYONE) (SF_FADEOUT) write_byte(g_iTeamColors[player_state][0]); write_byte(g_iTeamColors[player_state][1]); write_byte(g_iTeamColors[player_state][2]); write_byte(180); message_end(); }
stock my_return_check(id) { new game = get_game_state(); if(!is_user_connected(id) || game == GAME_OFF || game == GAME_ENDED) return 1;
return 0; }
public specials_needed() { if(g_iMaxTraitors > get_special_count(PC_TRAITOR)) return PC_TRAITOR; else if(g_iMaxDetectives > get_special_count(PC_DETECTIVE)) return PC_DETECTIVE;
return PC_NONE; }
public give_survival_credits() { static players[32]; new num, id, bonus = get_pcvar_num(cvar_credits_det_bonussurv); get_players(players, num, "a"); for(--num; num >= 0; num--) { id = players[num]; if(get_special_state(id) == PC_DETECTIVE) { g_iPlayerData[id][PD_CREDITS] += bonus; client_print_color(id, print_team_default, "%s %L", TTT_TAG, id, "TTT_AWARD4", bonus, floatround(get_pcvar_float(cvar_credits_det_survtime))*g_iMultiSeconds); g_iMultiSeconds++; } } }
public reset_all() { static players[32]; new num, id, i; get_players(players, num); for(--num; num >= 0; num--) { id = players[num];
set_special_state(id, PC_NONE); for(i = 0; i < PLAYER_DATA; i++) { if(i == PD_KARMA || i == PD_KARMATEMP || i == PD_KILLEDDEATHS) continue; if(i == PD_KILLEDBY || i == PD_KILLEDBYITEM) g_iPlayerData[id][i] = -1; else g_iPlayerData[id][i] = 0; } if(task_exists(id)) remove_task(id); set_attrib_all(id, 0); }
for(i = 0; i < PLAYER_CLASS; i++) g_iSpecialCount[i] = 0; //if(get_game_state() == GAME_ENDED || get_game_state() == GAME_RESTARTING) // set_game_state(GAME_OFF);
g_iMultiSeconds = 1; g_iMultiCount = 1;
if(task_exists(TASK_SURVIVAL)) remove_task(TASK_SURVIVAL); }
public reset_client(id) { for(new i = 0; i < PLAYER_DATA; i++) { if(i == PD_KILLEDBY || i == PD_KILLEDBYITEM) g_iPlayerData[id][i] = -1; else g_iPlayerData[id][i] = 0; }
set_special_state(id, PC_NONE); set_attrib_all(id, 0); }
public karma_modifier(attacker, victim, type) { if(attacker == 0) attacker = victim;
if(!is_user_connected(attacker) || !is_user_connected(victim) || get_game_state() == GAME_OFF) return;
static players[32]; new num, karmamulti, modifier; get_players(players, num); if(type == KARMA_KILL) { karmamulti = floatround(get_pcvar_num(cvar_karma_multi)*(g_iPlayerData[victim][PD_KARMATEMP]/1000.0)); modifier = (3*(g_iMaxPlayers-1)-(num-1))/(g_iMaxPlayers-1); } else if(type == KARMA_DMG) { new Float:temp = entity_get_float(victim, EV_FL_dmg_take); karmamulti = floatround(temp*0.25) < 1 ? 1 : floatround(temp*get_pcvar_float(cvar_karma_damage)); modifier = 1; }
new ivictim = get_special_alive(victim); new iattacker = get_special_alive(attacker);
switch(iattacker) { case PC_TRAITOR: //attacker is traitor { switch(ivictim) { case PC_TRAITOR: g_iPlayerData[attacker][PD_KARMATEMP] -= karmamulti*modifier; case PC_DETECTIVE, PC_INNOCENT: g_iPlayerData[attacker][PD_KARMATEMP] += karmamulti/modifier; } } case PC_DETECTIVE, PC_INNOCENT: //attacker is detective or innocent { switch(ivictim) { case PC_TRAITOR: g_iPlayerData[attacker][PD_KARMATEMP] += karmamulti/modifier; case PC_DETECTIVE, PC_INNOCENT: g_iPlayerData[attacker][PD_KARMATEMP] -= karmamulti*modifier; } } }
karma_reset(attacker); }
stock karma_reset(id) { if(g_iPlayerData[id][PD_KARMATEMP] > 1000) g_iPlayerData[id][PD_KARMATEMP] = 1000; else if(g_iPlayerData[id][PD_KARMATEMP] < 1) g_iPlayerData[id][PD_KARMATEMP] = 0; }
stock set_game_state(new_state) { ttt_log_to_file(LOG_GAMETYPE, "[PRE ] Gamemode: %s", g_szGameModes[g_iGlobalInfo[GI_GAMEMODE]]); if(get_game_state() && get_game_state() < GAME_ENDED && new_state == GAME_RESTARTING) log_amx("[TTT] Game has restarted :( (game: %d)", get_game_state());
g_iGlobalInfo[GI_GAMEMODE] = new_state;
new ret; ExecuteForward(g_iGameModeForward, ret, new_state); ttt_log_to_file(LOG_GAMETYPE, "[POST] Gamemode: %s", g_szGameModes[g_iGlobalInfo[GI_GAMEMODE]]); }
stock get_game_state() return g_iGlobalInfo[GI_GAMEMODE];
stock get_special_state(id) return g_iPlayerData[id][PD_PLAYERSTATE];
stock get_special_alive(id) { if(!is_user_alive(id)) return g_iPlayerData[id][PD_KILLEDSTATE];
return get_special_state(id); }
stock set_special_state(id, new_state) { if(!is_user_connected(id)) return;
new player_state = get_special_state(id); if(player_state == new_state) return;
set_special_count(player_state, get_special_count(player_state)-1);
set_player_data(id, PD_PLAYERSTATE, new_state); set_special_count(new_state, get_special_count(new_state)+1); }
stock set_player_data(id, pd, value) g_iPlayerData[id][pd] = value;
stock get_player_data(id, pd) return g_iPlayerData[id][pd];
stock set_special_count(special_state, count) g_iSpecialCount[special_state] = count;
stock get_special_count(special_state) return g_iSpecialCount[special_state];
stock set_fake_team(id, getstate) { new num, i, specstate; static players[32]; get_players(players, num);
for(--num; num >= 0; num--) { i = players[num]; specstate = get_special_state(i); switch(getstate) { case PC_INNOCENT, PC_DETECTIVE: { if(specstate == PC_DETECTIVE) set_fake_message(id, i, "CT"); else set_fake_message(id, i, "TERRORIST"); } case PC_TRAITOR: { if(specstate == PC_TRAITOR || specstate == PC_DETECTIVE) { set_fake_message(id, i, "CT"); if(specstate == PC_DETECTIVE) set_attrib_special(i, 4, PC_TRAITOR, PC_NONE, PC_DEAD); } else set_fake_message(id, i, "TERRORIST"); } } } }
stock set_fake_message(id, i, msg[]) { message_begin(MSG_ONE_UNRELIABLE, g_pMsgTeamInfo, _, id); write_byte(i); write_string(msg); message_end(); }
stock Float:get_round_time() return get_gametime() - g_fRoundStart - g_fFreezeTime;
stock mynew_register_cvar(name[], string[], description[], flags = 0, Float:fvalue = 0.0) { new_register_cvar(name, string, description); return register_cvar(name, string, flags, fvalue); }
stock new_register_cvar(name[], string[], description[], plug[] = "ttt_core.amxx") { static path[96]; if(!path[0]) { get_localinfo("amxx_configsdir", path, charsmax(path)); format(path, charsmax(path), "%s/%s", path, TTT_CONFIGFILE); }
new file; if(!g_tCvarsToFile) g_tCvarsToFile = TrieCreate();
if(!file_exists(path)) { file = fopen(path, "wt"); if(!file) return 0;
fprintf(file, "// Server specific.^n"); fprintf(file, "%-32s %-8s // %-32s // %s^n", "mp_tkpunish", "0", plug, "Disables TeamKill punishments"); fprintf(file, "%-32s %-8s // %-32s // %s^n", "mp_friendlyfire", "1", plug, "Enables friendly fire to attack teamnates"); fprintf(file, "%-32s %-8s // %-32s // %s^n", "mp_limitteams", "0", plug, "Disables team limits"); fprintf(file, "%-32s %-8s // %-32s // %s^n", "mp_autoteambalance", "0", plug, "Disables team limits"); fprintf(file, "%-32s %-8s // %-32s // %s^n", "mp_freezetime", "0", plug, "Disables freeze time on round start"); fprintf(file, "%-32s %-8s // %-32s // %s^n", "mp_playerid", "2", plug, "Disables team info when aiming on player"); fprintf(file, "%-32s %-8s // %-32s // %s^n", "sv_allktalk", "1", plug, "Enables alltalk"); fprintf(file, "%-26s %-14s // %-32s // %s^n", "amx_statscfg", "off PlayerName", plug, "Disables player name when aiming on player"); fprintf(file, "^n"); fprintf(file, "// Mod specific.^n"); } else { file = fopen(path, "rt"); if(!file) return 0;
//if(!TrieGetSize(g_tCvarsToFile)) if(!g_iTrieSize) { new newline[48]; static line[128]; while(!feof(file)) { fgets(file, line, charsmax(line)); if(line[0] == ';' || !line[0]) continue;
parse(line, newline, charsmax(newline)); remove_quotes(newline); #if AMXX_VERSION_NUM >= 183 TrieSetCell(g_tCvarsToFile, newline, 1, false); #else TrieSetCell(g_tCvarsToFile, newline, 1); #endif g_iTrieSize++; } } fclose(file); file = fopen(path, "at"); }
if(!TrieKeyExists(g_tCvarsToFile, name)) { fprintf(file, "%-32s %-8s // %-32s // %s^n", name, string, plug, description); #if AMXX_VERSION_NUM >= 183 TrieSetCell(g_tCvarsToFile, name, 1, false); #else TrieSetCell(g_tCvarsToFile, name, 1); #endif g_iTrieSize++; }
fclose(file); return 1; }
// API public _set_playerstate(plugin, params) { if(params != 2) return ttt_log_api_error("ttt_set_playerstate needs 2 params(p1: %d, p2: %d)", plugin, params, get_param(1), get_param(2));
set_special_state(get_param(1), get_param(2)); return 1; }
public _set_gamemode(plugin, params) { if(params != 1) return ttt_log_api_error("ttt_set_gamemode needs 1 param(p1: %d)", plugin, params, get_param(1));
set_game_state(get_param(1)); return 1; }
public _get_specialcount(plugin, params) { if(params != 1) return ttt_log_api_error("ttt_get_specialcount needs 1 param(p1: %d)", plugin, params, get_param(1));
return get_special_count(get_param(1)); }
public Float:_get_roundtime() return get_round_time();
public _get_playerdata(plugin, params) { if(params != 2) return ttt_log_api_error("ttt_get_playerdata needs 2 params(p1: %d, p2: %d)", plugin, params, get_param(1), get_param(2));
return get_player_data(get_param(1), get_param(2)); }
public _set_playerdata(plugin, params) { if(params != 3) return ttt_log_api_error("ttt_set_playerdata needs 3 params(p1: %d, p2: %d, p3: %d)", plugin, params, get_param(1), get_param(2), get_param(3));
new id = get_param(1); new datatype = get_param(2); set_player_data(id, datatype, get_param(3)); if(datatype == PD_KARMATEMP) karma_reset(id);
return 1; }
public _get_globalinfo(plugin, params) { if(params != 1) return ttt_log_api_error("ttt_get_globalinfo needs 1 param(p1: %d)", plugin, params, get_param(1));
return g_iGlobalInfo[get_param(1)]; }
public _set_globalinfo(plugin, params) { if(params != 2) return ttt_log_api_error("ttt_set_globalinfo needs 2 params(p1: %d, p2: %d)", plugin, params, get_param(1), get_param(2));
g_iGlobalInfo[get_param(1)] = get_param(2); return 1; }
public _register_cvar(plugin, params) { if(params != 3) return ttt_log_api_error("ttt_register_cvar needs 3 params", plugin, params);
static name[48], string[16], pluginname[48], description[128]; get_string(1, name, charsmax(name)); get_string(2, string, charsmax(string)); get_string(3, description, charsmax(description)); get_plugin(plugin, pluginname, charsmax(pluginname));
return new_register_cvar(name, string, description, pluginname); }
public _add_exception(plugin, params) { if(params != 1) return ttt_log_api_error("ttt_add_exception needs 1 param(p1: %d)", plugin, params, get_param(1));
static const size = sizeof(g_iExceptionItems); for(new i = 0; i < size; i++) { if(g_iExceptionItems[i] == -2) { g_iExceptionItems[i] = get_param(1); return 1; } }
return 0; }
public _find_exception(plugin, params) { if(params != 1) return ttt_log_api_error("ttt_find_exception needs 1 param(p1: %d)", plugin, params, get_param(1));
new item = get_param(1); static const size = sizeof(g_iExceptionItems); for(new i = 0; i < size; i++) { if(g_iExceptionItems[i] == item) return 1; }
return 0; }
cvars:
PHP Code:
"karma_cmd_points" "100" //how many points "karma_cmd_time" "10" //minutes to wait to get again
command:
say and say team: /karma
don't know if it s working due to no compiling posibility
PHP Code:
#include <timer_controller> #include <ttt>
you don't provide these includes. if it's not working post again here the problem and the above include files
|