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
emeği geçene teşekkürler.
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()
})

