[ROZWIĄZANE] Problem z czytaniem flagi
Najlepsza odpowiedź Rivit 06.01.2020 17:36
Dabster
05.01.2020
Cześć, na wstępie dodam, że mam na serwerze VIP'a i SVIP'a z kompilatora.
Druga sprawa jest taka, że jak daje plugin na VIP'a aby działał od tej godziny do tej godziny to nie nadaje mi w pełni "flag"? albo coś takiego. Mam na myśli, że dostaje w hudzie [Status]: VIP/SVIP ale nie dostaje np. podwójnego skoku czy choćby menu z wyborem broni. Po nadaniu tego nocnego VIP'a jest dostęp tylko do menu wyboru skinów.
Taki sam problem mam z losowaniem VIP w danej rundzie, dostaję dostęp do skinów/oraz jest napis w hudzie nic więcej.
(Z podobnym problem borykam się po usługach w sklepie sms, że osoba która zakupiła coś przez sklep sms ma tylko napis hud/skiny)
Załączone pliki
Rivit
05.01.2020
Cześć, na wstępie dodam, że mam na serwerze VIP'a i SVIP'a z kompilatora.
no i to jest kluczowa rzecz. Vip z generatora działa tak, że sprawdza flage tylko gdy gracz wchodzi na serwer i na tej podstawie osądza czy gracz jest vipem czy nie
Rozwiazania są conajmniej 3:
- dodać natyw w vipie, który by ustawiał (wymuszał), że gracz jest vipem. W momencie gdy dajesz graczowi freevipa to wywołać ten natyw. Po zmianie mapy wszystko wraca do normy.
- przerobic vipa i svipa aby sprawdzaly caly czas czy gracz ma flage a nie tylko przy wejsciu na serwer
- wywołać forward amxbans_admin_connect a reszta stanie się tak jak w punkcie 1. jest to o tyle lepsze ze nie trzeba nic w vipie grzebac, tylko dodac wywolanie forwardu gdy gracz otrzymuje freevipa
Dabster
05.01.2020
Cześć, na wstępie dodam, że mam na serwerze VIP'a i SVIP'a z kompilatora.
no i to jest kluczowa rzecz. Vip z generatora działa tak, że sprawdza flage tylko gdy gracz wchodzi na serwer i na tej podstawie osądza czy gracz jest vipem czy nie
Rozwiazania są conajmniej 3:
- dodać natyw w vipie, który by ustawiał (wymuszał), że gracz jest vipem. W momencie gdy dajesz graczowi freevipa to wywołać ten natyw. Po zmianie mapy wszystko wraca do normy.
- przerobic vipa i svipa aby sprawdzaly caly czas czy gracz ma flage a nie tylko przy wejsciu na serwer
- wywołać forward amxbans_admin_connect a reszta stanie się tak jak w punkcie 1. jest to o tyle lepsze ze nie trzeba nic w vipie grzebac, tylko dodac wywolanie forwardu gdy gracz otrzymuje freevipa
Jak wykonać drugą i trzecią kropkę?
Rivit
05.01.2020
wystarczy jedną z tych 3 kropek zrobic
sposob z forwardami - powinnien zadziałać ale nie jestem pewny czy cos nie sknocilem:
nocny_vip.sma
Dabster
05.01.2020
wystarczy jedną z tych 3 kropek zrobic
sposob z forwardami - powinnien zadziałać ale nie jestem pewny czy cos nie sknocilem:
nocny_vip.sma
Spoiler
Spróbuje i dam znać ;#
Dabster
05.01.2020
Free vip mi działa.
No a pytanie jakbym chciał dodać ten forward do loswania vip co którąś tam rundę czy też by mi to przeszło?
Drugie pytanie dodając ten forward do VIP'a / SVIP'a zakup przez sklep sms działał by prawidłowo?
Rivit
05.01.2020
tak, generalnie ten forward wystarczy dodac w miejscu gdzie uzywasz set_user_flags
pamiętaj tylko, żeby w ExecuteForward znalazło się prawidłowe id, żeby kto inny nie dostał
jesli korzystasz z amxx 1.9 to mozesz chyba tak zrobic:
new iForwardOne; ExecuteForward(g_ForwardOne, iForwardOne, id);
->
ExecuteForward(g_ForwardOne, _, id);
Użytkownik TibacK edytował ten post 05.01.2020 16:35
Dabster
05.01.2020
tak, generalnie ten forward wystarczy dodac w miejscu gdzie uzywasz set_user_flags
pamiętaj tylko, żeby w ExecuteForward znalazło się prawidłowe id, żeby kto inny nie dostał
jesli korzystasz z amxx 1.9 to mozesz chyba tak zrobic:
new iForwardOne; ExecuteForward(g_ForwardOne, iForwardOne, id);->
ExecuteForward(g_ForwardOne, _, id);
W którym miejscu robię źle? (załączam .sma)
Korzystam z 1.8.3.
Załączone pliki
Użytkownik Dabster edytował ten post 05.01.2020 17:24
Rivit
05.01.2020
To o czym mowilem, patrz na id gracza, któremu ustawiasz flage. To samo id musi byc w executeforward
set_user_flags(iPlayer, get_user_flags(iPlayer) | FLAGA); new iForwardOne; ExecuteForward(g_ForwardOne, iForwardOne, id);
id -> iPlayer
Dabster
05.01.2020
To o czym mowilem, patrz na id gracza, któremu ustawiasz flage. To samo id musi byc w executeforward
set_user_flags(iPlayer, get_user_flags(iPlayer) | FLAGA); new iForwardOne; ExecuteForward(g_ForwardOne, iForwardOne, id);id -> iPlayer
Nawet nie wiesz ile przy Tobie się da nauczyć.
Teraz pytanie czy takie forward jak tu i z takim samym id (te co jest napisane w VIP/SVIPIE) naprawi mi problem ze sklepem sms przy zakupie?
Dabster
05.01.2020
W którym miejscu tutaj dodać forwarda? (dodam, że w vipie z kompilatora jest owy "forward amxbans_admin_connect(id);" i nie działa on za bardzo prawidłowo.)
Załączone pliki
Użytkownik Dabster edytował ten post 05.01.2020 18:42
Rivit
05.01.2020
no nie, wlasnie po to jest ten forward, zeby go wywolac. ten forward jest wywolywany gdy jakis admin czy ktos kto ma flagi wchodzi na serwer (funkcjonalnosc amxbansa)
wlasnie to co ja ci kazalem zrobic. dodanie tego executeforward to jest taki 'fake', żeby cie poprawnie zautoryzowalo jako vip.
edit:
nie widzialem ze edytowales.
Ale vipa nie ruszasz, zmieniasz tylko pluginy, które dają vipa. bo to co chcesz zrobic to wywolac forward amxbans admin connect ale z innego pluginu, tak,żeby plugin vip ponowil sprawdzenie flag
Użytkownik TibacK edytował ten post 05.01.2020 18:48
Dabster
05.01.2020
Rozumiem, a da się zrobić tego forwarda jako osobny plugin aby właśnie normalnie autoryzowało VIP/SVIPA?
(Co do losowania VIP od 3 rundy działa i też dzięki za pomoc)
Rivit
05.01.2020
jasne ze sie da, ale to juz takie obejscie chamskie
mozna zrobic zeby co spawn sprawdzalo po prostu czy masz odpowiednie flagi, jesli tak to wywolac ten forward wlasnie.
ale jak mowie, badziewne to rozwiazanie.
jak masz wiele pluginów co ustawiaja vipa itp to lepiej bedzie przerobic to tak jak mowilem ci w pierwszym poscie;
- przerobic vipa i svipa aby sprawdzaly caly czas czy gracz ma flage a nie tylko przy wejsciu na serwer
Dabster
05.01.2020
Na serwerze odnośnie VIP i SVIPA posiadam:
-losowanie VIP (tutaj ten forward)
-nocny VIP (tutaj ten forward)
-VIP
-SVIP
-fixvipds.
- przerobic vipa i svipa aby sprawdzaly caly czas czy gracz ma flage a nie tylko przy wejsciu na serwer
No to w jaki sposób mógłbym to przerobić?
Rivit
05.01.2020
najprostrzy sposob na vipy:
otwierasz sobie vip.sma
szukasz:
g_Vip[id]=true; g_Vip[id]=false; bool:g_Vip[33]
i usuwasz
potem szukasz w pliku wystąpień: g_Vip
jak masz np
g_Vip[id]
to zamieniasz to na:
(get_user_flags(id) & FLAGA_VIP)
Zwróć uwage na id, zebys nie dal innego niz bylo w g_Vip
no i analogicznie jakbys mial
!g_Vip[id]
to zamieniasz na:
!(get_user_flags(id) & FLAGA_VIP)
Dabster
05.01.2020
Po usunięci g_VIP dostaję błędy przy kompilacji.
Tutaj pokaże Ci zwykłego VIP oraz VIPA w którym zmieniałem g_VIP
Załączone pliki
Użytkownik Dabster edytował ten post 05.01.2020 20:01
Rivit
05.01.2020
kurde źle podmieniasz... mowie ci co i jak
patrz:
if(is_user_alive(i) && g_Vip[i]){
zamieniles na:
if(is_user_alive(i) && (get_user_flags(id) & FLAGA_VIP){
ma byc tak:
if(is_user_alive(i) && (get_user_flags(i) & FLAGA_VIP)){
mowilem - patrz na id jakie dałeś.
poza tym, zamiast FLAGA_VIP tam miala byc twoja flaga
alze zeby nie dawac za kazdym razem mozesz tam pisac FLAGA_VIP, a na samej górze pod ostatnim #include dodać:
#define FLAGA_VIP ADMIN_LEVEL_H
to spowoduje, że wszystkie wystąpienia FLAGA_VIP zostaną zamienione na ADMIN_LEVEL_H, więc bedziesz mogl sterowac z jednego miejsca
Dabster
05.01.2020
Zrobiłem poprawiłem ale jedna linijka dalej krzyczy:
if(is_user_alive(killer) && g_Vip[killer] && get_user_team(killer) != get_user_team(victim)){ <== ta linijka
Użytkownik Dabster edytował ten post 05.01.2020 20:34