bu kodların içinde oyuncuya asist veren sistem var benim isteğim asist yaptığımız kişinin nickinin de eklenmesi yani kime 51 üstü hasar verdiysek onun nicki say mesajı olarak belirtsin
Kod:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <csx>
#include <fun>
#include <hamsandwich>
#define PLUGIN "frag"
#define VERSION "1.6"
#define AUTHOR "thorin"
new bool:g_bMatchActive = false
new bool:g_bFragResetUsed = false // Harita basinda sıfırlama hakkını tutar
new g_iSavedKills[33]
new g_iSavedDeaths[33]
// Oyuncularin birbirine verdigi NET hasarlari tutan matris [Saldiran][Kurban]
new g_iDamageDealt[33][33]
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_concmd("amx_kytbasla", "Cmd_MacStart", ADMIN_KICK, "Mac modunu baslatir ve skorlari sabitler")
register_concmd("amx_kytbitir", "Cmd_MacStop", ADMIN_KICK, "Mac modunu bitirir ve normal sisteme gecer")
register_concmd("amx_fragsifirla", "Cmd_FragSifirla", ADMIN_KICK, "Tum oyuncularin frag ve olumlerini sifirlar (Haritada 1 kez)")
register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0")
RegisterHam(Ham_Killed, "player", "Fwd_PlayerKilled_Post", 1)
RegisterHam(Ham_Spawn, "player", "Fwd_PlayerSpawn_Post", 1)
// NOT: Ham_TakeDamage iptal edildi. Zirh ve HE bomba tutarsizligi icin asagidaki client_damage kullanilacak.
}
public plugin_cfg() {
g_bFragResetUsed = false
}
public client_putinserver(id) {
g_iSavedKills[id] = 0
g_iSavedDeaths[id] = 0
ClearPlayerDamage(id)
}
public client_disconnected(id) {
g_iSavedKills[id] = 0
g_iSavedDeaths[id] = 0
ClearPlayerDamage(id)
}
// Oyuncunun hasar kayitlarini temizleme fonksiyonu
ClearPlayerDamage(id) {
for (new i = 1; i <= 32; i++) {
g_iDamageDealt[id][i] = 0
g_iDamageDealt[i][id] = 0
}
}
public Cmd_MacStart(id, level, cid) {
if (!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED
if (g_bMatchActive) {
client_print_color(id, print_team_default, "")
return PLUGIN_HANDLED
}
g_bMatchActive = true
ClearAllDamage()
SyncAllScores()
client_print_color(0, print_team_default, "")
return PLUGIN_HANDLED
}
public Cmd_MacStop(id, level, cid) {
if (!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED
if (!g_bMatchActive) {
client_print_color(id, print_team_default, "")
return PLUGIN_HANDLED
}
g_bMatchActive = false
ClearAllDamage()
for (new i = 1; i <= 32; i++) {
if (is_user_connected(i)) {
g_iSavedKills[i] = 0
g_iSavedDeaths[i] = 0
set_user_frags(i, 0)
cs_set_user_deaths(i, 0)
UpdateScoreboard(i)
}
}
client_print_color(0, print_team_default, "^4[SSS] Skor sayma ve frag kayit sistemi kapatildi! Fraglar sifirlandi.")
return PLUGIN_HANDLED
}
public Cmd_FragSifirla(id, level, cid) {
if (!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED
if (g_bFragResetUsed) {
client_print_color(id, print_team_default, "")
return PLUGIN_HANDLED
}
ClearAllDamage()
for (new i = 1; i <= 32; i++) {
if (is_user_connected(i)) {
g_iSavedKills[i] = 0
g_iSavedDeaths[i] = 0
set_user_frags(i, 0)
cs_set_user_deaths(i, 0)
UpdateScoreboard(i)
}
}
g_bFragResetUsed = true
client_print_color(0, print_team_default, "")
return PLUGIN_HANDLED
}
// Zırh (Çelik Yelek) ve %50 Bomba eklentisi uyumlu yeni hasar yakalama fonksiyonu
public client_damage(attacker, victim, damage, wpnindex, hitplace, TA) {
if (!g_bMatchActive)
return
if (attacker < 1 || attacker > 32 || !is_user_connected(attacker) || attacker == victim)
return
// TA = Team Attack. Eğer 0 ise kurban düşmandır (FF Koruması).
if (!TA) {
// Buradaki 'damage' değişkeni; çelik yeleğin hasarı emmesi veya sunucundaki
// bomba hasarını %50 düşüren eklentinin işlemlerinden SONRA oyuncudan
// düşen NET can miktarıdır. Bu sayede tutarsızlıklar tamamen ortadan kalkar.
g_iDamageDealt[attacker][victim] += damage
}
}
public bomb_defused(id) {
if (g_bMatchActive && is_user_connected(id)) {
set_task(0.2, "Task_SaveBombScore", id)
}
}
public bomb_explode(planter, defuser) {
if (g_bMatchActive && is_user_connected(planter)) {
set_task(0.2, "Task_SaveBombScore", planter)
}
}
public Task_SaveBombScore(id) {
if (g_bMatchActive && is_user_connected(id)) {
g_iSavedKills[id] = get_user_frags(id)
UpdateScoreboard(id)
}
}
public Fwd_PlayerKilled_Post(victim, killer) {
if (!g_bMatchActive)
return HAM_IGNORED
// İntihar veya dunya hasari durumlari
if (killer == victim || killer == 0 || !is_user_connected(killer)) {
if (is_user_connected(victim)) {
set_task(0.1, "Task_RestoreScore", victim)
}
// Kurbanin hasar matrisini temizle
for (new i = 1; i <= 32; i++) {
g_iDamageDealt[i][victim] = 0
}
return HAM_IGNORED
}
// --- ASIST KONTROL SISTEMI ---
new iVictimTeam = get_user_team(victim)
for (new i = 1; i <= 32; i++) {
// Katil haricinde, bagli olan ve kurbanin dusmani olan oyunculari tara
if (i != killer && is_user_connected(i) && get_user_team(i) != iVictimTeam) {
// Eger bu oyuncu olene 51 veya uzeri net hasar vermisse asist kazanir
if (g_iDamageDealt[i][victim] >= 51) {
set_user_frags(i, get_user_frags(i) + 1)
// Asist yapan oyuncuya 200 Dolar para verme islemi (Max 16000 korumali)
new current_money = cs_get_user_money(i)
cs_set_user_money(i, clamp(current_money + 200, 0, 16000))
UpdateScoreboard(i)
client_print_color(i, print_team_default, "^4[SSS] ^3Asist ^1yaptigin icin ^4+1 ^1frag ve^4 200$ ^1kazandin! (Verdigin hasar: ^4%d^1)", g_iDamageDealt[i][victim])
}
}
}
// Asist dagitildiktan sonra tum skorlari guvenle hafizaya kilitliyoruz
SyncAllScores()
// Ölen oyuncunun uzerindeki hasar kayitlarini yeni canlanma icin sifirliyoruz
for (new i = 1; i <= 32; i++) {
g_iDamageDealt[i][victim] = 0
}
return HAM_IGNORED
}
public Task_RestoreScore(id) {
if (!g_bMatchActive || !is_user_connected(id))
return
set_user_frags(id, g_iSavedKills[id])
cs_set_user_deaths(id, g_iSavedDeaths[id])
UpdateScoreboard(id)
}
public Event_NewRound() {
if (!g_bMatchActive)
return
// Yeni el basinda tum hasar matrisini tamamen temizle
ClearAllDamage()
for (new i = 1; i <= 32; i++) {
if (is_user_connected(i)) {
set_user_frags(i, g_iSavedKills[i])
cs_set_user_deaths(i, g_iSavedDeaths[i])
}
}
set_task(0.5, "Task_UpdateAllScores")
}
public Task_UpdateAllScores() {
if (!g_bMatchActive)
return
UpdatePlayerStaggered(1)
}
UpdatePlayerStaggered(id) {
if (!g_bMatchActive || id > 32)
return
if (is_user_connected(id)) {
UpdateScoreboard(id)
set_task(0.03, "OnUpdateNextPlayer", id + 1)
} else {
UpdatePlayerStaggered(id + 1)
}
}
public OnUpdateNextPlayer(id) {
UpdatePlayerStaggered(id)
}
public Fwd_PlayerSpawn_Post(id) {
if (!g_bMatchActive || !is_user_alive(id))
return
set_user_frags(id, g_iSavedKills[id])
cs_set_user_deaths(id, g_iSavedDeaths[id])
// Canlanan oyuncunun hasar gecmisini tedbiren temizle
for (new i = 1; i <= 32; i++) {
g_iDamageDealt[id][i] = 0
g_iDamageDealt[i][id] = 0
}
}
public SyncAllScores() {
if (!g_bMatchActive)
return
for (new i = 1; i <= 32; i++) {
if (is_user_connected(i)) {
g_iSavedKills[i] = get_user_frags(i)
g_iSavedDeaths[i] = cs_get_user_deaths(i)
}
}
}
ClearAllDamage() {
for (new i = 1; i <= 32; i++) {
for (new j = 1; j <= 32; j++) {
g_iDamageDealt[i][j] = 0
}
}
}
UpdateScoreboard(id) {
message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"))
write_byte(id)
write_short(g_iSavedKills[id])
write_short(g_iSavedDeaths[id])
write_short(0)
write_short(get_user_team(id))
message_end()
}