Участник
Пользователь
- Сообщения
- 143
- Реакции
- 68
- Помог
- 1 раз(а)
Всем привет.
Дорогие знатоки. Прошу Вашей помощи.
Хочу добавить в плагин https://dev-cs.ru/resources/273/ возможность выдачи рандомного оружия как бонус вместе с деньгами в новом раунде.
Из оригинала удалил только все что связанно с выводом в чат и HUD, мне это не нужно. Добавил выдачу рандомного оружия.
Теперь мне надо подсказку, как сделать чтобы деньги и оружие, или хоть оружие выдавалось в новом раунде.
Сей час работает, но выдает в конце раунда и при условии что игрок остался жив. Поэтому мне нужно чтобы это все работало с нового раунда.
Вот получилось так, если что не так поправте).
Дорогие знатоки. Прошу Вашей помощи.
Хочу добавить в плагин https://dev-cs.ru/resources/273/ возможность выдачи рандомного оружия как бонус вместе с деньгами в новом раунде.
Из оригинала удалил только все что связанно с выводом в чат и HUD, мне это не нужно. Добавил выдачу рандомного оружия.
Теперь мне надо подсказку, как сделать чтобы деньги и оружие, или хоть оружие выдавалось в новом раунде.
Сей час работает, но выдает в конце раунда и при условии что игрок остался жив. Поэтому мне нужно чтобы это все работало с нового раунда.
Вот получилось так, если что не так поправте).
Код:
#include <amxmodx>
#include <reapi>
new const g_Cases[] = {2, 0, 1, 1, 1, 2};
new g_FriendlyFire = false;
new g_MoneyBonus;
enum _:PLAYER_DATA {
PLAYER_KILLS,
PLAYER_DMG,
PLAYER_HS
}
new g_PlayerData[MAX_CLIENTS + 1][PLAYER_DATA];
new g_CvarFriendlyFire, g_CvarMoney;
public plugin_init() {
register_plugin("Best player of the round", "0.4", "F@nt0M");
register_dictionary("best_player_of_round.txt");
RegisterHookChain(RG_RoundEnd, "RoundEnd", 1);
RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage", 1);
RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed", 1);
g_CvarMoney = register_cvar("bpr_money", "1000"); // 0 - отключить выдачу денег , значение выше нуля - сколько денег получит игрок
bind_pcvar_num(g_CvarMoney, g_MoneyBonus);
g_CvarFriendlyFire = get_cvar_pointer("mp_friendlyfire");
bind_pcvar_num(g_CvarFriendlyFire, g_FriendlyFire);
}
public OnConfigsExecuted() {
g_MoneyBonus = get_pcvar_num(g_CvarMoney);
g_FriendlyFire = get_pcvar_num(g_CvarFriendlyFire);
}
public WeaponRandom(id)
{
switch(random(4))
{
case 0:
{
rg_give_item(id, "weapon_m4a1");
rg_set_user_bpammo(id, WEAPON_M4A1, 90);
}
case 1:
{
rg_give_item(id, "weapon_ak47");
rg_set_user_bpammo(id, WEAPON_AK47, 90);
}
case 2:
{
rg_give_item(id, "weapon_mp5navy");
rg_set_user_bpammo(id, WEAPON_MP5N, 120);
}
case 3:
{
rg_give_item(id, "weapon_sg550");
rg_set_user_bpammo(id, WEAPON_SG550, 90);
}
}
}
public client_disconnected(id) {
arrayset(g_PlayerData[id], 0, PLAYER_DATA);
}
public RoundEnd(WinStatus:status, ScenarioEventEndRound:event) {
#pragma unused status
if (event == ROUND_GAME_COMMENCE || event == ROUND_GAME_RESTART || event == ROUND_GAME_OVER) {
return HC_CONTINUE;
}
if (get_playersnum(0) <= 0) {
return HC_CONTINUE;
}
set_task(1.0, "TaskRoundEnd");
return HC_CONTINUE;
}
public CBasePlayer_TakeDamage(id, inflictor, attacker, Float:damage, damageType) {
if (id == attacker || attacker < 1 || attacker > MaxClients) {
return HC_CONTINUE;
}
if (g_FriendlyFire && get_member(id, m_iTeam) == get_member(attacker, m_iTeam)) {
return HC_CONTINUE;
}
if (inflictor != attacker && ~damageType & DMG_GRENADE) {
return HC_CONTINUE;
}
g_PlayerData[attacker][PLAYER_DMG] += floatround(damage);
if( get_member(id, m_LastHitGroup) == HIT_HEAD) {
g_PlayerData[attacker][PLAYER_HS]++;
}
return HC_CONTINUE;
}
public CBasePlayer_Killed(id, attacker) {
if (id == attacker || attacker < 1 || attacker > MaxClients) {
return HC_CONTINUE;
}
if (g_FriendlyFire && get_member(id, m_iTeam) == get_member(attacker, m_iTeam)) {
return HC_CONTINUE;
}
g_PlayerData[attacker][PLAYER_KILLS]++;
return HC_CONTINUE;
}
public TaskRoundEnd() {
new players[MAX_CLIENTS], num, player, i;
new maxId, maxKills, maxDmg;
new name[MAX_NAME_LENGTH];
get_players(players, num, "h");
for (i = 0; i < num; i++) {
player = players[i];
if (g_PlayerData[player][PLAYER_KILLS] > maxKills || g_PlayerData[player][PLAYER_DMG] > maxDmg) {
maxId = player;
maxKills = g_PlayerData[player][PLAYER_KILLS];
maxDmg = g_PlayerData[player][PLAYER_DMG];
}
}
if (maxId == 0) {
return;
}
if (g_MoneyBonus > 0) {
rg_add_account(maxId, g_MoneyBonus, AS_ADD, true);
WeaponRandom(player);
}
get_user_name(maxId, name, charsmax(name));
for (i = 0; i < num; i++) {
player = players[i];
if (is_user_bot(player)) {
continue;
}
}
for(i = 0; i <= MAX_CLIENTS; i++) {
arrayset(g_PlayerData[i], 0, PLAYER_DATA);
}
}
stock makeNumber(number) {
if (4 < (number % 100) < 20) {
return 2;
} else if ((number % 10) < 5) {
return g_Cases[number % 10];
} else {
return 2;
}
}
Последнее редактирование: