Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Sprite nad głową


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
11 odpowiedzi w tym temacie

#1 Filip1512

    Wszechmogący

  • Power User

Reputacja: 137
Zaawansowany

  • Postów:641
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:Poland
Offline

Napisano 05.11.2013 01:02

Cześć,

korzystając z innych tematów i kodu, który znalazłem, jak sprawić, aby ten sprite był widoczny zawsze, ale tylko nad konkretną osobą (z wykorzystaniem get_user_authid, bo na SteamID)?

W którym miejscu to się zmienia? Ogólnie wydaje mi się na pierwszy rzut oka, że to powinien być inny event, ale co poza tym?

#include <amxmodx>
#include <amxmisc>
#include <cstrike>

#define TE_PLAYERATTACHMENT 124

new sprite;

public plugin_init() {
    register_event("StatusValue", "on_ShowStatus", "be", "1=2", "2!0");
    
}

public plugin_precache()
    sprite = precache_model("sprites/sprite.spr");

public on_ShowStatus(id){
    
    new cel, body
    
    get_user_aiming(id, cel, body)
    
    if(cel != 0 && is_user_alive(id) && is_user_alive(cel) && cs_get_user_team(id) == cs_get_user_team(cel)){
        if(get_user_flags(cel) & ADMIN_IMMUNITY){
            message_begin(MSG_ONE, SVC_TEMPENTITY,_,id)
            write_byte(TE_PLAYERATTACHMENT)
            write_byte(cel)
            write_coord(35)
            write_short(sprite)
            write_short(100)
            message_end()
        }
    }
}

  • +
  • -
  • 0
Filip / `NN
Wymuszanie rate'ów co spawna - update v2.1!

#2 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 05.11.2013 01:38

Za wyświetlanie samego sprite odpowiedzialny jest ten fragment:

message_begin(MSG_ONE, SVC_TEMPENTITY,_,id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(cel)
write_coord(35)
write_short(sprite)
write_short(100)
message_end()

 

Ostatni parametr jest odpowiedzialny za czas wyświetlania. Nie pamiętam w jakich jest jednostkach, musisz sobie to obadać. W każdym bądź razie, wystarczy że odnośnie odpowiedniego gracza będziesz w tasku non stop to wysyłał... Gracz na którym ma być to wyświetlane to cel. id to gracz który ma widzieć znaczek.


  • +
  • -
  • 1

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#3 Filip1512

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 137
Zaawansowany

  • Postów:641
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:Poland
Offline

Napisano 05.11.2013 13:14

Hmm a coś takiego? Mało optymalny coś ten kod mi się wydaje i pewnie błędny, ale nie mam bladego pojęcia, co zrobić, żeby bez najeżdżania na kogoś myszką ten sprite widniał.
 
 
#include <amxmodx>
#include <amxmisc>
#include <cstrike>

#define TE_PLAYERATTACHMENT 124
#define "SID_CEL" "tutaj steam id"

new sprite;

public plugin_init(){
    set_task(0.1, "SpriteEffect", 0, _, _, "b")
    
}

public plugin_precache()
    sprite = precache_model("sprites/sprite.spr");

public SpriteEffect(id){
    
    new cel, sid[20]
    get_user_authid(cel, sid, 19)
    
    if(equali(sid, "SID_CEL") && is_user_alive(id) && is_user_alive(cel)){
        message_begin(MSG_ONE, SVC_TEMPENTITY,_,0)
        write_byte(TE_PLAYERATTACHMENT)
        write_byte(cel)
        write_coord(35)
        write_short(sprite)
        write_short(100)
        message_end()
    }
}

  • +
  • -
  • 0
Filip / `NN
Wymuszanie rate'ów co spawna - update v2.1!

#4 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 980
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 05.11.2013 13:20

Kod wyżej nie zadziała.

 

Dlaczego zmieniłeś event handler na task ?


  • +
  • -
  • 1

#5 Filip1512

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 137
Zaawansowany

  • Postów:641
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:Poland
Offline

Napisano 05.11.2013 13:26

A czy ten event jest potrzebny, skoro wystarczy 'tylko' utworzyć sprite nad głową konkretnej osoby bez konieczności namierzania na cel?


  • +
  • -
  • 0
Filip / `NN
Wymuszanie rate'ów co spawna - update v2.1!

#6 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 05.11.2013 13:42

Użył taska, bo nie chce robić widocznego sprite, gdy ktoś celownikiem najedzie, ale przez cały czas każdy ma ten sprite widzieć nad tamtego głową.

 

Task wykonujesz zbyt często. Zwiększ odstępy między taskami, zwiększając jednocześnie czas wyświetlania tego sprite.


  • +
  • -
  • 1

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#7 Filip1512

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 137
Zaawansowany

  • Postów:641
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:Poland
Offline

Napisano 05.11.2013 13:46

Czasem się będę bawił jak kod będzie działać, póki co jest tylko tak, żeby był, ale nadal nie wiem czy kod będzie działał (Dark pisze wyżej, że nie), a nie mam żadnych możliwości sprawdzenia tego.


  • +
  • -
  • 0
Filip / `NN
Wymuszanie rate'ów co spawna - update v2.1!

#8 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 05.11.2013 14:04

Owszem, nie będzie...

#include <amxmodx>
#include <amxmisc>
#include <cstrike>

#define TE_PLAYERATTACHMENT 124
const SID_CEL[]="tutaj steam id"

new cel=0;

new sprite;

public plugin_init(){
    set_task(0.1, "SpriteEffect", 0, _, _, "b")
    
}

public client_authorized(id) {
    new sid[20]
    get_user_authid(id,sid, 19)
    if(equal(sid, SID_CEL))
        cel=id;
}

public client_disconnect(id) {
    if (id==cel)
        cel=0;
}   

public plugin_precache()
    sprite = precache_model("sprites/sprite.spr");

public SpriteEffect(taskId){

    if(!cel)
        return;

    if(!is_user_connected(cel)) {
        cel = 0;
        return;
    }

    if(!is_user_alive(cel))
        return;

    for(new id=1; id<33; ++id) {

        if(id == cel)
            continue;

        if(!is_user_connected(id)||!is_user_alive(id))
            continue;

        message_begin(MSG_ONE, SVC_TEMPENTITY,_,id)
        write_byte(TE_PLAYERATTACHMENT)
        write_byte(cel)
        write_coord(35)
        write_short(sprite)
        write_short(100)
        message_end()
    }
}
To już powinno działać... Nie jestem pewien, ale chyba można to przerobić na MSG_ALL dzięki czemu unikniesz pętli... Nie wiem jednak co się stanie, gdy użyjesz tego na graczu będącym celem (tj jemu samemu wyświetlisz nad jego głową sprite)... Może to powodować jakieś dziwne błędy, musisz to sprawdzić...
  • +
  • -
  • 1

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#9 Filip1512

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 137
Zaawansowany

  • Postów:641
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:Poland
Offline

Napisano 05.11.2013 17:16

A nie lepiej MSG_BROADCAST? Bo to jest bardziej dodatek niż konieczność.

I powtarzam, niestety nie mam możliwości sprawdzenia tego..


  • +
  • -
  • 0
Filip / `NN
Wymuszanie rate'ów co spawna - update v2.1!

#10 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 05.11.2013 20:34

Nie mam pojęcia jak się CS zachowa, gdy gracz dostanie informację, że nad jego własną głową ma się wyświetlić sprite, musisz to sprawdzić niestety. MSG_BROADCAST wysyła do wszystkich, więc i do gracza, któremu ma się to nad głową wyświetlać. Jeśli będzie to źle działało, oczywiście możesz użyć MSG_ONE_UNRELIABLE


  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#11 Filip1512

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 137
Zaawansowany

  • Postów:641
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:Poland
Offline

Napisano 05.11.2013 20:42

A gdyby zmienić warunek

if(id == cel)
continue;

na

 

if(id == cel)
return;

 

?


  • +
  • -
  • 0
Filip / `NN
Wymuszanie rate'ów co spawna - update v2.1!

#12 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 05.11.2013 21:06

Wtedy przerwie Ci całkowicie wyświetlanie. Załóżmy, że gracz cel ma id=3, więc cel=3. Graczy masz 6 na serwerze, mają id ustawione po kolei (1-6), wtedy dla 1 i 2 wyświetli Ci się ten sprite, ale 4, 5 i 6 już go widzieć nie będą. Ma się tylko nie wysyłać dla gracza który jest celem.

 

Gdy chcesz to przerobić na MSG_ALL albo MSG_BROADCAST, wtedy rezygnujesz całkowicie z pętli i warunków wewnątrz niej.


  • +
  • -
  • 1

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych