←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Wymuszanie wygrania rundy przez...

Zablokowany

  • +
  • -
dram - zdjęcie dram 14.03.2011

Jak wymusić wygranie rundy przez dany team?

Mam załadowany orpheu co ustawia że runda nigdy się nie kończy, i chciałbym aby kończyła się wtedy kiedy ja zażyczę sobie oraz punkt został przyznawany tej drużynie której również sobie zażyczę...


Pozdrawiam.
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 14.03.2011

Round Terminator - AlliedModders

ten sam autor, ten sam moduł
Odpowiedz

  • +
  • -
dram - zdjęcie dram 14.03.2011

Wszystko fajnie tylko że ten plugin z moim pluginem koliduje^^ mój plugin zabrania skończenia rundy, a ten plugin kończy runde.

Np. ROUND_DRAW...

Próbowałem usunąć ale te orpheu jest nie do ogarnięcia^^
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 14.03.2011

nie trzeba ogarniać orpheu, żeby to poprawić; użyj jakieś danej wspólnej (cvar, xvar) ustawiaj na 1 jak ma nie blokować i 0 jak ma blokować; na początku obsługi komendy ustaw 1, przed handled daj 0 i problem z głowy


załączam przykładową implementację, nie testowałem

Załączone pliki

Odpowiedz

  • +
  • -
dram - zdjęcie dram 14.03.2011

mhm a mógłbyś przerobić to tak aby działało tylko komendą wymuszanie końca rundy? Jest coś takiego aktualnie że admin wpisuje

terminate_round i runda się kończy a jak przerobić to na tylko i wyłącznie taką komendę?

hmm poza tym niestety nie działa. Dobrym rozwiązaniem byłaby tak jak wyżej napisałem komenda. Wywołuje się komende z poziomu serwera i plugin się uaktywnia(ja ten plugin wpletuje do swojego kodu)
Użytkownik dram edytował ten post 14.03.2011 21:50
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 14.03.2011

głupio mi pytać, ale..: skompilowałeś? zaraz sam sprawdzę


a z tą komendą to nie czaje zupełnie
Odpowiedz

  • +
  • -
dram - zdjęcie dram 14.03.2011

Mhm.

Patrz.


Można przechwycić wtedy kiedy bomba jest rozbrojona/wybuchnie itd.

public bomb_explode
...

I w tej funkcji dać wywołanie funkcji która w tym właśnie momencie WYMUSZA skończenie rundy.

Wg. mnie to jest całkiem dziwne bo wystarczy że wrzuce pliki do config/orpheu z tym wymuszaniem kończenia rundy i plugin jest tu nie potrzebny...

Bo automatycznie kończy runde.
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 14.03.2011

eh, wystarczyło wyłączyć na czas wykonania komendy infinity_round komendą

I działa komenda
terminate_round timer

oraz natyw z .inc`a

Załączone pliki

Odpowiedz

  • +
  • -
dram - zdjęcie dram 14.03.2011

Hmm rozumiem że dobrze mnie zrozumiałeś co miałem na myśli?

Mianowicie Chciałem się pozbyć round_draw oraz końca rundy w sytuacjach kiedy ct lub tt nie żyje, a w przypadku wybuchu lub rozbrojenia paki runda się restartuje i punkt zostaje przyznany zwycięskiemu teamowi.


// no więc testuje.

Dodano 14 marzec 2011 - 23:10:
wplotłem to do kodu i jest prawie dobrze gdyby nie to że zawsze ct wygrywa:O

Mianowicie.

Round draw usunięty w piz****

Ale gdy paka wybuchnie wygrywa ct zamiast terro, gdy wymuszam komendą wygrywanie terro i tak ct wygrywa


Pozdrawiam.

///
W przypadku gdy wymuszam wygranie TT jest normalny napis.. terrorist win ALE nie dostają punktu

// jednak tak samo jest w przypadku ct
Użytkownik dram edytował ten post 14.03.2011 23:14
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 15.03.2011

pokaż komendę jakiej użyłeś; powinno to być pewnie coś związane z celami mapy
Odpowiedz

  • +
  • -
dram - zdjęcie dram 15.03.2011

public game_forwards() <> {}
public game_forwards() <disabled>
{
OrpheuRegisterHook(OrpheuGetFunction("CheckMapConditions", "CHalfLifeMultiplay"), "game_blockConditions")
OrpheuRegisterHook(OrpheuGetFunction("CheckWinConditions", "CHalfLifeMultiplay"), "game_blockConditions")

if(is_linux_server())
	OrpheuRegisterHook(OrpheuGetFunction("HasRoundTimeExpired", "CHalfLifeMultiplay"), "game_blockConditions")
	
	else
		game_memoryReplace("roundTimeCheck", {0x90, 0x90, 0x90})
	
	state enabled
}

public OrpheuHookReturn:game_blockConditions() <>
return OrpheuIgnored

public OrpheuHookReturn:game_blockConditions() <enabled>
{
OrpheuSetReturn(false)

return OrpheuSupercede
}

game_memoryReplace(szID[], const iBytes[], const iLen = sizeof iBytes)
{
new iAddress

OrpheuMemoryGet(szID, iAddress)

for(new i; i < iLen; i++)
{
OrpheuMemorySetAtAddress(iAddress, "roundTimeCheck|dummy", 1, iBytes[i], iAddress)

iAddress++
}

server_cmd("sv_restart 1")
}

a w inicie

game_forwards()


to użyłem do zablokowania rund

a to twoje (skopiowane) do zakończenia rund. Ale teraz coś się pokiepściło bo jest restart rundy tyle że punktów nie przyznaje...

Pozdrawiam.

// acha przyznaje punkt dla ct wtedy kiedy wpisze terminate_round time (wtedy wygrywa ct "target has been saved")

Dodano 15 marzec 2011 - 15:55:
mhm teraz to mi tylko chodzi o to aby przyznać punkt danej drużynie.
Odpowiedz

  • +
  • -
dram - zdjęcie dram 16.03.2011

A jak pobrać ile punktów ma dany team? || jest już taki temat a jak ustawić czas rozbrajania bomby też orpheu?
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 16.03.2011

nasłuchuj tego eventu i zapisuj punkty, jak ktoś wygra dodaj 1 i wyślij własną wiadomość
Odpowiedz
Zablokowany