hlmod.hu
https://hlmod.hu/

Kör vég manuálisan
https://hlmod.hu/viewtopic.php?f=9&t=31663
Oldal: 1 / 1

Szerző:  koko.988 [2025.11.24. 13:05 ]
Hozzászólás témája:  Kör vég manuálisan

Üdv! Van egy pluginom, ami annyit tesz, hogy a bombát telepítő terrornak megnyit egy menüt, ahol 4 szin közül választhat. A defusernek szintén előjön a menü, és ha helyes a vezeték, akkor a loser team-on silentkill lefut (ez idáig jó is), de:
Ha le van rakva a bomba, és megölöm az utolsó terror, aztán vágom el a helyes vezetéket (nem tud lefutni a silentkill, mert nem él senki a loser teamből), tehát nincs semmi, ami 'körvéget' generálna.
Ugyebár kézileg meghívni nem tudok eventet, se bomb_defused, se round_end stb, ezt mind a játék motorja hívná.
Esetleg más megoldás van e?

Szerző:  Csabika20034 [2025.11.24. 16:35 ]
Hozzászólás témája: 

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:

  1. public DefuserCorrectWire(id)
  2. {
  3. // CT nyert
  4. new ct = get_team_score("CT")
  5. cs_set_team_score("CT", ct + 1)
  6.  
  7. // 1 másodperc múlva restart
  8. set_task(1.0, "RestartRound")
  9. }
  10.  
  11. public RestartRound()
  12. {
  13. server_cmd("sv_restartround 1")
  14. }

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:
  1. #include <reapi>
  2.  
  3. public DefuserCorrectWire(id)
  4. {
  5. // CT win (7 = CT Defuse win)
  6. rg_round_end(7, 0)
  7. }

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

Szerző:  koko.988 [2025.11.24. 21:12 ]
Hozzászólás témája: 

ReApival (rg_round_end(7, 0)) megoldódott, köszönöm!

Oldal: 1 / 1 Minden időpont UTC+01:00 időzóna szerinti
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/