Szia!
Igen, ilyen helyzetben a motor nem generál round_end-et, mert nincs, ami kiváltaná nincs élő játékos, nincs bombacsapat megölve, és a bomba sincs defuselődve engine szinten, hiszen a te logikád csak menüt használ, nem a valódi bombamechanikát.
A megoldás:
Neked kell kézzel körvéget csinálnod, de nem eventtel (mert azt nem lehet), hanem játékbeli parancsokkal vagy AMXX funkciókkal, amiket a szerver valódi körvégnek tekint.
1.

Működő, bevált megoldás: cs_set_team_score() + force_round_restart
Ez a legstabilabb:
Amikor a CT helyesen választja a vezetéket, de már nincs élő T:
1. Kit is „nyert” a kör → CT
2. Növeled a CT körszámát
3. Kényszerített körindítás (sv_restartround)
Kód:
public DefuserCorrectWire(id)
{
// CT nyert
new ct = get_team_score("CT")
cs_set_team_score("CT", ct + 1)
// 1 másodperc múlva restart
set_task(1.0, "RestartRound")
}
public RestartRound()
{
server_cmd("sv_restartround 1")
}
Ez teljesen érvényes round end lesz, scoreboard frissít, idő újraindul, új kör indul.
2.

Második opció: direkt
CT győzelem (TerminateRound)
Használhatod az Orpheu-t vagy ReAPI-t:
ReAPI:
#include <reapi>
public DefuserCorrectWire(id)
{
// CT win (7 = CT Defuse win)
rg_round_end(7, 0)
}
Ez valódi engine round_end, de csak akkor működik, ha van ReAPI a szerveren.
3.

Egyszerűbb fallback: az összes T respawn nélkül „eliminálása”
Ha a T-k már halottak, ez természetesen nem segít.
Ezért ezt nem javaslom.
Miért nem jó a sima silentkill?
Mert:
Ha nincs élő T → nincs mit megölni
A motor nem hív round_end-et
A bomba sincs defuselődve engine által
Te menüd logikája nem generál „hivatalos” bomb_defused eseményt
Ezért a kör „fagyott” állapotba kerül.

Ajánlott végső megoldás
Használd a
sv_restartround-ot és előtte állítsd be a nyertes csapat pontszámát.
Ez biztos, motor-kompatibilis, AMXX-nél standard, minden modon működik:
cs_set_team_score("CT", cs_get_team_score("CT") + 1)UI: Épp dolgozom gépen írtam eggyet teszteld.
► Spoiler mutatása
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <cstrike>
#define TEAM_T 1
#define TEAM_CT 2
new gCorrectWire // A terrorista által választott helyes vezeték ID (1–4)
new gPlayerWire[33] // Ki melyiket vágta
new bool:gBombPlanted // Bomba aktív-e
public plugin_init()
{
register_plugin("Bomb Mod", "1.0", "Csabika20034(RaiN)")
register_event("BombPlanted", "OnBombPlant", "a")
register_clcmd("wire_cut", "CmdWireCutMenu") // debug/teszt parancs
RegisterHam(Ham_Use, "grenade", "OnBombUse") // defuser megkísérli
}
//
// ------------ BOMB PLANT --------------
//
public OnBombPlant()
{
gBombPlanted = true
new planter = get_loguser() // Ki rakta? (AMXX built-in)
if(!is_user_connected(planter))
return
ShowPlanterWireMenu(planter)
}
public ShowPlanterWireMenu(id)
{
new menu = menu_create("Válassz vezetéket (1-4)", "PlanterWireHandler")
menu_additem(menu, "Piros (1)")
menu_additem(menu, "Kék (2)")
menu_additem(menu, "Zöld (3)")
menu_additem(menu, "Sárga (4)")
menu_display(id, menu)
}
public PlanterWireHandler(id, menu, item)
{
if(item == MENU_EXIT)
return
gCorrectWire = item + 1 // 1–4
client_print(id, print_chat, "[Bomb Mod] Te választottad a helyes vezetéket: %d", gCorrectWire)
menu_destroy(menu)
}
//
// ------------ DEFUSE WIRE MENU --------------
//
public OnBombUse(ent, id)
{
// Csak CT használhatja a bombát
if(!is_user_alive(id) || get_user_team(id) != TEAM_CT)
return HAM_IGNORED
if(!gBombPlanted)
return HAM_IGNORED
ShowDefuseWireMenu(id)
return HAM_SUPERCEDE // ne fusson normál defuse
}
public ShowDefuseWireMenu(id)
{
new menu = menu_create("Melyik vezetéket vágod?", "DefuseHandler")
menu_additem(menu, "Piros (1)")
menu_additem(menu, "Kék (2)")
menu_additem(menu, "Zöld (3)")
menu_additem(menu, "Sárga (4)")
menu_display(id, menu)
}
public DefuseHandler(id, menu, item)
{
if(item == MENU_EXIT)
return
new picked = item + 1
gPlayerWire[id] = picked
if(picked == gCorrectWire)
{
client_print(0, print_chat, "[Bomb Mod] %n elvágta a helyes vezetéket!", id)
HandleCorrectWire(id)
}
else
{
client_print(0, print_chat, "[Bomb Mod] %n elvágta a rossz vezetéket!", id)
user_kill(id, 1)
}
menu_destroy(menu)
}
//
// ---------- HELYES VEZETÉK KEZELÉSE -----------
//
public HandleCorrectWire(id)
{
new tCount = CountAlive(TEAM_T)
if(tCount > 0)
{
// vannak élő terroristák → silent kill
for(new i = 1; i <= 32; i++)
{
if(is_user_alive(i) && get_user_team(i) == TEAM_T)
user_kill(i, 1)
}
}
else
{
// nincs élő T → kézzel körvége
EndRoundCTWin()
}
gBombPlanted = false
}
//
// ------------ CT győzelem generálása ------------
//
public EndRoundCTWin()
{
new msg = get_user_msgid("TeamScore")
message_begin(MSG_ALL, msg)
write_string("CT")
write_short(1)
message_end()
// Bomba eltávolítása
new ent = find_ent_by_class(-1, "grenade")
if(ent) remove_entity(ent)
}
//
// ------------ Segédfüggvény ------------
//
public CountAlive(team)
{
new count = 0
for(new i=1; i<=32; i++)
{
if(is_user_alive(i) && get_user_team(i) == team)
count++
}
return count
}