Yasaklı Kod
Gönderilme zamanı: Cmt Mar 28, 2020 3:05 pm
Yasaklı kod hatası alıyorum yardım edermisiniz
Kod: Tümünü seç
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <nvault>
// Aici stergeti // din fata in functie de ce sistem de credite folositi.
#define FURIEN_ASKHANAR
//#define POINTS_SYSTEM_CYBY
//#define ARAGON_CREDITS
// Aici sunt inregistrate nativele in functie de ce sistem folositi.
#if defined FURIEN_ASKHANAR
native fcs_get_user_credits(client)
native fcs_set_user_credits(client, credits)
#endif
#if defined POINTS_SYSTEM_CYBY
native get_points(id)
native set_points(id, value)
#endif
#if defined ARAGON_CREDITS
native get_user_credits(id)
native set_user_credits(id, credits)
#endif
// Variabile pentru nivel
new nivel[33], clasa_furien[33], clasa_anti_furien[33], g_nextclass_a[33], g_nextclass[33];
// Constanta unde este inregistrat tagul.
new const TAG[] = "[Уникальный ЗМ | Класс]";
// Sistemul de salvare
new salvare_nvault;
// Credite pe damage
new daune_provocate[33];
#define DAUNE_MAXIM 200 // Aici modifici pentru cat damage sa primeasca un credit.
// Mesajul sincronizat pentru spectatori si afisarea creditelor.
new mesaj_sync;
// Setarea vitezei prin hamsandwich [stock utilizat din Zombie Plague]
new Ham:Ham_Player_ResetMaxSpeed = Ham_Item_PreFrame;
// Rezolvam bugul cu viteza in freeze time xDxD.
new freeze;
// Aici definim cate clase sunt. Intotdeauna numarul lor trebuie sa fie + 1. Exemplu, daca sunt 14 clase in total noi punem 15.
#define CLASE 15
// Numele claselor FURIEN
new const CLASELE_FURIEN[CLASE][] =
{
"",
"Плоть",
"Танк",
"Ведьма",
"Хищник",
"Нечисть",
"Пришелец",
"Чужой",
"Кровосос",
"Болотная Тварь",
"Изгой",
"Морлок",
"Тарк",
"Мутант",
"Глава Мутантов"
}
// Numele claselor Anti-Furien
new const CLASELE_ANTI_FURIEN[CLASE][] =
{
"",
"Запах",
"Салага",
"Дух",
"Слон",
"Череп",
"Дембель",
"Курсант",
"Лейтенант",
"Ст.Лейтенант",
"Капитан",
"Майор",
"Подполковник",
"Полковник",
"Генерал-Майор"
}
// Pretul fiecarui nivel in credite.
new const CREDITE_COST[CLASE] =
{
0,
50,
100,
200,
400,
600,
800,
1000,
1400,
1550,
1600,
2000,
2500,
3000,
5000
}
// Task-ul pentru afisarea hudului.
enum (+= 100)
{
TASK_SHOWHUD
}
#define ARATA_HUD (taskid - TASK_SHOWHUD)
// Aici se termina inregistrarea porcariilor.
// Init.
public plugin_init()
{
register_plugin("Anti-Furien & Furien Class", "1.0.2", "cyby")
// Comanda pentru afisarea meniului de clase.
register_clcmd("say /class", "showclass")
// Evenimentul de ucidere.
register_event("DeathMsg", "event_ucidere", "a")
// Functii prinse prin hamsandwich.
RegisterHam(Ham_TakeDamage, "player", "ham_take_dmg")
RegisterHam(Ham_Spawn, "player", "spawn_post", 1)
RegisterHam(Ham_Player_ResetMaxSpeed, "player", "speed_reset_post", 1)
// Functii pentru rezolvarea bugului cu viteza.
register_event("HLTV", "round_start_before_freeze", "a", "1=0", "2=0")
register_logevent("round_start_after_freeze", 2, "1=Round_Start")
// Definim functia de Hud Sincronizat.
mesaj_sync = CreateHudSyncObj()
}
// Salvarea pe nvault. Recomand sa nu modifici.
public plugin_cfg()
{
salvare_nvault = nvault_open("level_furien")
if(salvare_nvault == INVALID_HANDLE)
set_fail_state("Eroare la deschiderea bazei de date.")
}
// Inchiderea fisierului nvault daca serverul pica sau se schimba harta. Recomand sa nu modifici.
public plugin_end()
nvault_close(salvare_nvault)
public round_start_before_freeze()
freeze = true
public round_start_after_freeze()
freeze = false
// Nativ pentru a putea prelua nivelul fiecarui jucator.
// Ex: fr_get_level(id) == 2 [daca jucatorul are nivelul 2]
public plugin_natives()
register_native("fr_get_level", "native_get_level", 1)
// Partea din spate a nativului
public native_get_level(id)
{
if(!is_user_connected(id))
return -1;
return nivel[id];
}
// Evenimentul de ucidere.
public event_ucidere()
{
static atacator, victima;
atacator = read_data(1);
victima = read_data(2);
if(is_user_alive(atacator) && is_user_connected(victima))
{
check_level(atacator)
check_level(victima)
}
}
// Functia de scanare a nivelului + cumparare daca sunt gasiti numarul de credite la jucator + salvare.
public check_level(id)
{
static credite;
#if defined FURIEN_ASKHANAR
credite = fcs_get_user_credits(id)
#endif
#if defined POINTS_SYSTEM_CYBY
credite = get_points(id)
#endif
#if defined ARAGON_CREDITS
credite = get_user_credits(id)
#endif
if(credite >= CREDITE_COST[nivel[id]])
{
#if defined FURIEN_ASKHANAR
fcs_set_user_credits(id, credite - CREDITE_COST[nivel[id]])
#endif
#if defined POINTS_SYSTEM_CYBY
set_points(id, credite - CREDITE_COST[nivel[id]])
#endif
#if defined ARAGON_CREDITS
set_user_credits(id, credite - CREDITE_COST[nivel[id]])
#endif
nivel[id]++
SaveData(id)
color(id, ".v%s.g Поздравляю, вы получили.e %d.g.", TAG, nivel[id])
color(0, ".v%s.g Поздравляем.e %s.g для продвижения.e %d.g.", TAG, get_name(id), nivel[id])
}
}
// Functia de primire a unei cantitati de credite daca jucatorul face cat este definit in DAUNE_MAXIM.
public ham_take_dmg(victima, inductor, atacator, Float:daune)
{
if(victima == atacator || get_user_team(atacator) == get_user_team(victima) || !is_user_alive(atacator))
return HAM_IGNORED;
daune += nivel[atacator] * 2.0
SetHamParamFloat(4, daune)
daune_provocate[atacator] += floatround(daune)
if(daune_provocate[atacator] > DAUNE_MAXIM)
{
daune_provocate[atacator] = 0
#if defined FURIEN_ASKHANAR
fcs_set_user_credits(atacator, fcs_get_user_credits(atacator) + 1)
#endif
#if defined POINTS_SYSTEM_CYBY
set_points(atacator, get_points(atacator) + 1)
#endif
#if defined ARAGON_CREDITS
set_user_credits(atacator, get_user_credits(atacator) + 1)
#endif
check_level(atacator)
}
return HAM_IGNORED;
}
// Functia afisare meniul principal
public showclass(id)
{
if(!is_user_connected(id))
return;
static menu_name[300];
#if defined FURIEN_ASKHANAR
formatex(menu_name, charsmax(menu_name), "\yМеню Класса^nУровень:\r %d\w |\y Кредитов:\r %d\y^n^n", nivel[id], fcs_get_user_credits(id));
#endif
#if defined POINTS_SYSTEM_CYBY
formatex(menu_name, charsmax(menu_name), "\yМеню Класса^nУровень:\r %d\w |\y Кредитов:\r %d\y^n^n", nivel[id], get_points(id));
#endif
#if defined ARAGON_CREDITS
formatex(menu_name, charsmax(menu_name), "\yМеню Класса^nУровень:\r %d\w |\y Кредитов:\r %d\y^n^n", nivel[id], get_user_credits(id));
#endif
static item_menu_furien[60], item_menu_anti_furien[60];
formatex(item_menu_furien, charsmax(item_menu_furien), "Классы Фурий\r [%s]\y", CLASELE_FURIEN[clasa_furien[id]])
formatex(item_menu_anti_furien, charsmax(item_menu_anti_furien), "Классы Анти-фурий\r [%s]\y", CLASELE_ANTI_FURIEN[clasa_anti_furien[id]])
new menu = menu_create(menu_name, "spate_showclass")
menu_additem(menu, item_menu_furien, "1")
menu_additem(menu, item_menu_anti_furien, "2")
menu_display(id, menu, 0)
}
// Spatele meniului principal
public spate_showclass(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED;
}
static tasta;
tasta = item + 1
switch(tasta)
{
case 1: clase_furien(id)
case 2: clase_anti_furien(id)
}
menu_destroy(menu)
return PLUGIN_HANDLED;
}
// Meniul de clase Furien.
public clase_furien(id)
{
if(!is_user_connected(id))
return;
static menu_name[300];
#if defined FURIEN_ASKHANAR
formatex(menu_name, charsmax(menu_name), "\yКлассы Фурии^nУровень:\r %d\w |\y Кредитов:\r %d\y^nДанный класс:\r %s\y", nivel[id], fcs_get_user_credits(id), CLASELE_FURIEN[clasa_furien[id]]);
#endif
#if defined POINTS_SYSTEM_CYBY
formatex(menu_name, charsmax(menu_name), "\yКлассы Фурии^nУровень:\r %d\w |\y Кредитов:\r %d\y^nДанный класс:\r %s\y", nivel[id], get_points(id), CLASELE_FURIEN[clasa_furien[id]]);
#endif
#if defined ARAGON_CREDITS
formatex(menu_name, charsmax(menu_name), "\yКлассы Фурии^nуровень:\r %d\w |\y Кредитов:\r %d\y^nДанный класс:\r %s\y", nivel[id], get_user_credits(id), CLASELE_FURIEN[clasa_furien[id]]);
#endif
new menu = menu_create(menu_name, "spate_clase_furien")
static tasta[3], menu_item[35], i;
for(i = 1; i < sizeof CLASELE_FURIEN; i++)
{
if(nivel[id] < i || clasa_furien[id] == i)
formatex(menu_item, charsmax(menu_item), "\d%s | %d Уровень", CLASELE_FURIEN[i], i)
else
formatex(menu_item, charsmax(menu_item), "\y%s | %d Уровень", CLASELE_FURIEN[i], i)
tasta[0] = i
tasta[1] = 0
menu_additem(menu, menu_item, tasta)
}
menu_display(id, menu, 0)
}
// Meniul de clase Anti-Furien.
public clase_anti_furien(id)
{
if(!is_user_connected(id))
return;
static menu_name[300];
#if defined FURIEN_ASKHANAR
formatex(menu_name, charsmax(menu_name), "\yКлассы Анти-фурии^nУровень:\r %d\w |\y Кредитов:\r %d\y^nДанный класс:\r %s\y", nivel[id], fcs_get_user_credits(id), CLASELE_ANTI_FURIEN[clasa_anti_furien[id]]);
#endif
#if defined POINTS_SYSTEM_CYBY
formatex(menu_name, charsmax(menu_name), "\yКлассы Анти-фурии^nУровень:\r %d\w |\y Кредитов:\r %d\y^nДанный класс:\r %s\y", nivel[id], get_points(id), CLASELE_ANTI_FURIEN[clasa_anti_furien[id]]);
#endif
#if defined ARAGON_CREDITS
formatex(menu_name, charsmax(menu_name), "\yКлассы Анти-фурии^nУровень:\r %d\w |\y Кредитов:\r %d\y^nДанный класс:\r %s\y", nivel[id], get_user_credits(id), CLASELE_ANTI_FURIEN[clasa_anti_furien[id]]);
#endif
new menuid = menu_create(menu_name, "spate_clase_a_furien")
static menu_item[35], tasta[3], i;
for(i = 1; i < sizeof CLASELE_ANTI_FURIEN; i++)
{
if(nivel[id] < i || clasa_anti_furien[id] == i)
formatex(menu_item, charsmax(menu_item), "\d%s | %d Лвл", CLASELE_ANTI_FURIEN[i], i)
else
formatex(menu_item, charsmax(menu_item), "\y%s | %d Лвл", CLASELE_ANTI_FURIEN[i], i)
tasta[0] = i
tasta[1] = 0
menu_additem(menuid, menu_item, tasta)
}
menu_display(id, menuid, 0)
}
// Spatele meniului clase Furien.
public spate_clase_furien(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED;
}
static tasta;
tasta = item + 1
g_nextclass[id] = tasta
if(nivel[id] < g_nextclass[id])
{
color(id, ".v%s.g У вас слишком низкий уровень для класса.e %s.g.", TAG, CLASELE_FURIEN[tasta])
g_nextclass[id] = 0
clase_furien(id)
return PLUGIN_HANDLED;
}
if(g_nextclass[id] == clasa_furien[id])
{
color(id, ".v%s.gВы уже выбрали класс.e %s.g.", TAG, CLASELE_FURIEN[tasta])
g_nextclass[id] = 0
return PLUGIN_HANDLED;
}
color(id, ".v%s.g Вы выбрали класс.e %s.g. он будет доступен в слд. раунде.", TAG, CLASELE_FURIEN[tasta])
menu_destroy(menu);
return PLUGIN_HANDLED;
}
// Spatele meniului clase Anti-Furien.
public spate_clase_a_furien(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED;
}
static tasta;
tasta = item + 1
g_nextclass_a[id] = tasta
if(nivel[id] < g_nextclass_a[id])
{
color(id, ".v%s.g У вас слишком низкий уровень для класса.e %s.g.", TAG, CLASELE_ANTI_FURIEN[tasta])
g_nextclass_a[id] = 0
clase_anti_furien(id)
return PLUGIN_HANDLED;
}
if(g_nextclass_a[id] == clasa_anti_furien[id])
{
color(id, ".v%s.ggВы уже выбрали класс.e %s.g.", TAG, CLASELE_ANTI_FURIEN[tasta])
g_nextclass_a[id] = 0
return PLUGIN_HANDLED;
}
color(id, ".v%s.g Вы выбрали класс.e %s.g. Будет доступен в слд. раунде.", TAG, CLASELE_ANTI_FURIEN[tasta])
menu_destroy(menu);
return PLUGIN_HANDLED;
}
// Functia de spawn. Mai exact cand jucatorul este pus in baza, reinviat. Primeste facilitatile pentru nivelurile pe care jucatorul X are
// si Y level si clasa selectata din meniu Z ii seteaza ca si clasa default.
public spawn_post(id)
{
if(!is_user_alive(id))
return;
if(g_nextclass[id] != 0)
{
clasa_furien[id] = g_nextclass[id]
g_nextclass[id] = 0
color(id, ".v%s.g Вы успешно протестировали класс.e %s.g.", TAG, CLASELE_FURIEN[clasa_furien[id]])
}
if(g_nextclass_a[id] != 0)
{
clasa_anti_furien[id] = g_nextclass_a[id]
g_nextclass_a[id] = 0
color(id, ".v%s.g Вы успешно протестировали класс.e %s.g.", TAG, CLASELE_ANTI_FURIEN[clasa_anti_furien[id]])
}
if(get_user_team(id) == 2)
{
switch(clasa_anti_furien[id])
{
case 1: set_pev(id, pev_health, 100.0)
case 2: set_pev(id, pev_health, 120.0)
case 3: set_pev(id, pev_health, 130.0)
case 4: set_pev(id, pev_health, 140.0)
case 5: set_pev(id, pev_health, 150.0)
case 6: set_pev(id, pev_health, 160.0)
case 7: set_pev(id, pev_health, 170.0)
case 8: set_pev(id, pev_health, 180.0)
case 9: set_pev(id, pev_health, 190.0)
case 10: set_pev(id, pev_health, 200.0)
case 11: set_pev(id, pev_health, 210.0)
case 12: set_pev(id, pev_health, 220.0)
case 13: set_pev(id, pev_health, 235.0)
case 14: set_pev(id, pev_health, 250.0)
}
}
else if(get_user_team(id) == 1)
{
switch(clasa_furien[id])
{
case 1: set_pev(id, pev_health, 100.0)
case 2: set_pev(id, pev_health, 120.0)
case 3: set_pev(id, pev_health, 130.0)
case 4: set_pev(id, pev_health, 140.0)
case 5: set_pev(id, pev_health, 150.0)
case 6: set_pev(id, pev_health, 160.0)
case 7: set_pev(id, pev_health, 170.0)
case 8: set_pev(id, pev_health, 180.0)
case 9: set_pev(id, pev_health, 190.0)
case 10: set_pev(id, pev_health, 200.0)
case 11: set_pev(id, pev_health, 210.0)
case 12: set_pev(id, pev_health, 220.0)
case 13: set_pev(id, pev_health, 235.0)
case 14: set_pev(id, pev_health, 250.0)
}
}
new Float:valoare;
if(get_user_team(id) == 1)
{
switch(clasa_furien[id])
{
case 1: valoare = 620.0 / 800.0
case 2: valoare = 600.0 / 800.0
case 3: valoare = 580.0 / 800.0
case 4: valoare = 560.0 / 800.0
case 5: valoare = 560.0 / 800.0
case 6: valoare = 540.0 / 800.0
case 7: valoare = 520.0 / 800.0
case 8: valoare = 500.0 / 800.0
case 9: valoare = 480.0 / 800.0
case 10: valoare = 460.0 / 800.0
case 11: valoare = 440.0 / 800.0
case 12: valoare = 420.0 / 800.0
case 13: valoare = 400.0 / 800.0
case 14: valoare = 360.0 / 800.0
}
}
else if(get_user_team(id) == 2)
{
switch(clasa_anti_furien[id])
{
case 1: valoare = 800.0 / 800.0
case 2: valoare = 780.0 / 800.0
case 3: valoare = 760.0 / 800.0
case 4: valoare = 740.0 / 800.0
case 5: valoare = 720.0 / 800.0
case 6: valoare = 700.0 / 800.0
case 7: valoare = 680.0 / 800.0
case 8: valoare = 660.0 / 800.0
case 9: valoare = 640.0 / 800.0
case 10: valoare = 620.0 / 800.0
case 11: valoare = 600.0 / 800.0
case 12: valoare = 580.0 / 800.0
case 13: valoare = 560.0 / 800.0
case 14: valoare = 520.0 / 800.0
}
}
set_pev(id, pev_gravity, valoare)
check_level(id)
ExecuteHamB(Ham_Player_ResetMaxSpeed, id)
}
// Functia de setare a vitezei.
public speed_reset_post(id)
{
if(!is_user_alive(id) || freeze)
return;
set_player_maxspeed(id)
}
// Spatele functiei de setare a vitezei.
set_player_maxspeed(id)
{
switch(get_user_team(id))
{
case 1: set_pev(id, pev_maxspeed, 500.0 + (20.0 * clasa_furien[id]))
case 2: set_pev(id, pev_maxspeed, 240.0 + (10.0 * clasa_anti_furien[id]))
}
}
// Hudul de afisare a caracteristicilor
public HealthHud(taskid)
{
static id;
id = ARATA_HUD;
if(!is_user_alive(id))
{
id = pev(id, pev_iuser2)
if(!is_user_alive(id)) return;
}
static msj_clasa[50], clasa, rosu, verde, albastru;
switch(get_user_team(id))
{
case 1:
{
clasa = clasa_furien[id]
rosu = 200
verde = 50
albastru = 70
formatex(msj_clasa, charsmax(msj_clasa), "%s", CLASELE_FURIEN[clasa])
}
case 2:
{
clasa = clasa_anti_furien[id]
rosu = 20
verde = 50
albastru = 200
formatex(msj_clasa, charsmax(msj_clasa), "%s", CLASELE_ANTI_FURIEN[clasa])
}
}
if(id != ARATA_HUD)
{
static credits[15];
#if defined FURIEN_ASKHANAR
AddCommas(fcs_get_user_credits(id), credits, charsmax(credits))
#endif
#if defined POINTS_SYSTEM_CYBY
AddCommas(get_points(id), credits, charsmax(credits))
#endif
#if defined ARAGON_CREDITS
AddCommas(get_user_credits(id), credits, charsmax(credits))
#endif
set_hudmessage(100, 50, 150, -1.0, 0.8, 1, 0.3, 0.3)
ShowSyncHudMsg(ARATA_HUD, mesaj_sync, "%s^nЖизней: %d | Брони: %d^nУровень: %d | Класс: %s^nКредитов: %s", get_name(id), get_user_health(id), get_user_armor(id), nivel[id], msj_clasa, credits)
}
else
{
static credits[15];
#if defined FURIEN_ASKHANAR
AddCommas(fcs_get_user_credits(ARATA_HUD), credits, charsmax(credits))
#endif
#if defined POINTS_SYSTEM_CYBY
AddCommas(get_points(ARATA_HUD), credits, charsmax(credits))
#endif
#if defined ARAGON_CREDITS
AddCommas(get_user_credits(ARATA_HUD), credits, charsmax(credits))
#endif
set_dhudmessage(rosu, verde, albastru, -1.0, 0.85, 0, 0.0, 0.3, 0.1, 0.2)
show_dhudmessage(ARATA_HUD, "[ Жизней: %d | Брони: %d | Кредитов: %s ]^n[ Класс: %s | Уровень: %d ]", get_user_health(ARATA_HUD), get_user_armor(ARATA_HUD), credits, msj_clasa, nivel[ARATA_HUD])
}
}
// Functia de disconnect + salvare a datelor.
public client_disconnected(id)
{
daune_provocate[id] = 0
remove_task(id+TASK_SHOWHUD)
SaveData(id)
g_nextclass[id] = 0
g_nextclass_a[id] = 0
}
// Functia de join + preluare a datelor.
public client_putinserver(id)
{
LoadData(id)
g_nextclass[id] = 0
g_nextclass_a[id] = 0
set_task(0.3, "HealthHud", id+TASK_SHOWHUD, _, _, "b")
}
// Spatele functiei de preluare a datelor.
public LoadData(id)
{
new vaultkey[64], vaultdata[256];
format(vaultkey, 63, "%s##LEVELING", get_name(id))
format(vaultdata, 255, "%i#%i#%i#", nivel[id], clasa_furien[id], clasa_anti_furien[id])
nvault_get(salvare_nvault, vaultkey, vaultdata, 255)
replace_all(vaultdata, 255, "#", " ")
new lvl[32], clasaf[32], clasaa[32];
parse(vaultdata, lvl, 31, clasaf, 31, clasaa, 31)
nivel[id] = str_to_num(lvl)
clasa_furien[id] = str_to_num(clasaf)
clasa_anti_furien[id] = str_to_num(clasaa)
if(nivel[id] == 0)
nivel[id] = 1
if(clasa_furien[id] == 0)
clasa_furien[id] = 1
if(clasa_anti_furien[id] == 0)
clasa_anti_furien[id] = 1
}
// Spatele functiei de salvare a datelor.
public SaveData(id)
{
new vaultkey[64], vaultdata[256];
format(vaultkey, 63, "%s##LEVELING", get_name(id))
format(vaultdata, 255, "%i#%i#%i#", nivel[id], clasa_furien[id], clasa_anti_furien[id])
nvault_set(salvare_nvault, vaultkey, vaultdata)
}
// "Comanda rapida" la preluarea numelui pentru a scurta din cod pe ici pe colo.
stock get_name(id)
{
static name[32];
get_user_name(id, name, charsmax(name) - 1)
return name;
}
// Stockul folosit pentru chat color.
stock color(const id, const input[], any:...)
{
new count = 1, players[32];
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, ".v", "^4")
replace_all(msg, 190, ".g", "^1")
replace_all(msg, 190, ".e", "^3")
if(id) players[0] = id; else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if(is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}
// Functia pentru adaugarea la numere de peste 1000 virgula la ele.
public AddCommas(iNum , szOutput[] , iLen)
{
new szTmp[15], iOutputPos, iNumPos, iNumLen;
if(iNum < 0)
{
szOutput[iOutputPos++] = '-'
iNum = abs(iNum)
}
iNumLen = num_to_str(iNum, szTmp, charsmax(szTmp))
if(iNumLen <= 3)
iOutputPos += copy(szOutput[iOutputPos], iLen, szTmp)
else
{
while((iNumPos < iNumLen) && (iOutputPos < iLen))
{
szOutput[iOutputPos++] = szTmp[iNumPos++]
if((iNumLen - iNumPos) && !((iNumLen - iNumPos) % 3))
szOutput[iOutputPos++] = ','
}
szOutput[iOutputPos] = EOS
}
return iOutputPos;
}
// Stockul pentru dhudmessage.
stock __dhud_color;
stock __dhud_x;
stock __dhud_y;
stock __dhud_effect;
stock __dhud_fxtime;
stock __dhud_holdtime;
stock __dhud_fadeintime;
stock __dhud_fadeouttime;
stock __dhud_reliable;
stock set_dhudmessage( red = 0, green = 160, blue = 0, Float:x = -1.0, Float:y = 0.65, effects = 2, Float:fxtime = 6.0, Float:holdtime = 3.0, Float:fadeintime = 0.1, Float:fadeouttime = 1.5, bool:reliable = false )
{
#define clamp_byte(%1) ( clamp( %1, 0, 255 ) )
#define pack_color(%1,%2,%3) ( %3 + ( %2 << 8 ) + ( %1 << 16 ) )
__dhud_color = pack_color( clamp_byte( red ), clamp_byte( green ), clamp_byte( blue ) );
__dhud_x = _:x;
__dhud_y = _:y;
__dhud_effect = effects;
__dhud_fxtime = _:fxtime;
__dhud_holdtime = _:holdtime;
__dhud_fadeintime = _:fadeintime;
__dhud_fadeouttime = _:fadeouttime;
__dhud_reliable = _:reliable;
return 1;
}
stock show_dhudmessage( index, const message[], any:... )
{
new buffer[ 128 ];
new numArguments = numargs();
if( numArguments == 2 )
{
send_dhudMessage( index, message );
}
else if( index || numArguments == 3 )
{
vformat( buffer, charsmax( buffer ), message, 3 );
send_dhudMessage( index, buffer );
}
else
{
new playersList[ 32 ], numPlayers;
get_players( playersList, numPlayers, "ch" );
if( !numPlayers )
{
return 0;
}
new Array:handleArrayML = ArrayCreate();
for( new i = 2, j; i < numArguments; i++ )
{
if( getarg( i ) == LANG_PLAYER )
{
while( ( buffer[ j ] = getarg( i + 1, j++ ) ) ) {}
j = 0;
if( GetLangTransKey( buffer ) != TransKey_Bad )
{
ArrayPushCell( handleArrayML, i++ );
}
}
}
new size = ArraySize( handleArrayML );
if( !size )
{
vformat( buffer, charsmax( buffer ), message, 3 );
send_dhudMessage( index, buffer );
}
else
{
for( new i = 0, j; i < numPlayers; i++ )
{
index = playersList[ i ];
for( j = 0; j < size; j++ )
{
setarg( ArrayGetCell( handleArrayML, j ), 0, index );
}
vformat( buffer, charsmax( buffer ), message, 3 );
send_dhudMessage( index, buffer );
}
}
ArrayDestroy( handleArrayML );
}
return 1;
}
stock send_dhudMessage( const index, const message[] )
{
message_begin( __dhud_reliable ? ( index ? MSG_ONE : MSG_ALL ) : ( index ? MSG_ONE_UNRELIABLE : MSG_BROADCAST ), SVC_DIRECTOR, _, index );
{
write_byte( strlen( message ) + 31 );
write_byte( DRC_CMD_MESSAGE );
write_byte( __dhud_effect );
write_long( __dhud_color );
write_long( __dhud_x );
write_long( __dhud_y );
write_long( __dhud_fadeintime );
write_long( __dhud_fadeouttime );
write_long( __dhud_holdtime );
write_long( __dhud_fxtime );
write_string( message );
}
message_end();
}