Thread Rating:
  • 1 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Lista parametrów
#41
Tak dokładnie. Trzeba też pamiętać że jest to liczone od 0
więc: jeśli liczba slotów naszego serwera wynosi 32 to:

pierwszy gracz będzie miał ID: 0 a ostatni gracz będzie miał ID:31

a, pierwszy npc będzie miał ID:32 no i następne coraz wyższe.
Reply
#42
To to wiadomo hmmm chyba znów się nie sprecyzowałem xD Chodzi ogólnie o to,że mam taki kod:

function onPlayerDead(pid, kid)
{
if (kid == -1)
setLevel(pid, 1);
}

addEventHandler("onPlayerDead", onPlayerDead);

I kiedy nasz wilczek nas ubije to dostajemy lv,więc wartość minus jeden nie jest wyznacznikiem ID?
Reply
#43
no nie Big Grin Określ to za pomocą getPlayerName(kid) == "Wilczek" i masz wilczka zabójce
Ale tak ten kid powinnien być id wilczka czyli np. 32.
[Image: Quarchodr_sheqnnr.png]
Reply
#44
Z tego co mi wiadomo, to client-side'owy event "onPlayerDead" ma tylko jeden argument, (przykład z defaultowego skryptu npc.nut)

Squirrel Script
  1. local function deadHandler(pid)
  2. {
  3. print ("Die: " + pid);
  4.  
  5. if (pid == wolf)
  6. {
  7. unspawnNpc(pid);
  8. spawnWolf();
  9. }
  10. }
  11.  
  12. addEventHandler("onPlayerDead", deadHandler);


Reply
#45
Tak jak kolega Patrix powiedział. W Najnowszej wersji G2O ten callback jest po stronie serwera a nie klienta, i posiada tylko jeden argument, jak ziom wyżej pokazał, a ty używasz starszej wersji clienta G2O.
Oczywiście to nie twoja wina, zwyczajnie Admini etc mają wyjebane na to wszystko Smile
Reply
#46
Nie wyprowadzaj z błędu, jak sam jesteś w błędzie... Wydarzenie "onPlayerDead" jest dostępne zarówno po stronie serwera, jak i po stronie klienta. Z tym, że po stronie serwera posiada ono dwa argumenty, a po stronie klienta tylko jeden. Co do Twojego problemu - Ozaru:
Identyfikatorów nie można zmieniać, są one przydzielane automatycznie, licząc od maksymalnej liczby slotów przydzielonych dla graczy-1. Przykład:

Server:
Code:
function oPD(pid, kid){
    if(getPlayerName(kid) == "test" || kid >= getMaxSlots()){
        callClientFunc(pid, "sL");
    }//wysyłanie pakietu
}addEventHandler("onPlayerDead", oPD);

Client:
Code:
function sL(){
    setLevel(heroId, getLevel() + 1);
}//odbieranie pakietu

Edit: Przykład dostosowany do Twojej wypowiedzi:
Quote:I kiedy nasz wilczek nas ubije to dostajemy lv,więc wartość minus jeden nie jest wyznacznikiem ID?
P.S: Argument "kid" ma watość -1 tylko wtedy, gdy sprawca nie jest znany, np. śmierć poprzez upadek lub za pomocą skryptu, a konkretnie funkcji "setPlayerHealth".
Reply
#47
Ale ten kod działa:

function onPlayerDead(pid, kid)
{
if (kid == -1)
setLevel(pid, 1);
}

addEventHandler("onPlayerDead", onPlayerDead);

Kiedy wilczek nas ubije to mamy lv,tylko nie rozumiem co oznacza -1 bo np kiedy chcę dodać pid zamiast tego -1 to nic się nie dzieje,tak jakby działało to tylko w jedną stronę.
Reply
#48
(20.01.2018, 02:32)Ozaru Wrote: Ale ten kod działa:

function onPlayerDead(pid, kid)
{
if (kid == -1)
setLevel(pid, 1);
}

addEventHandler("onPlayerDead", onPlayerDead);

Kiedy wilczek nas ubije to mamy lv,tylko nie rozumiem co oznacza -1 bo np kiedy chcę dodać pid zamiast tego -1 to nic się nie dzieje,tak jakby działało to tylko w jedną stronę.

Em. Nie zauważyłem wtedy tego callbacka, sorry mój błąd.

Ta funkcja nie działa, nie wiem dlaczego sądzisz że działa, ale sprawdzałem z ciekawości i nie działa Smile

w plikach serwera w example/npc.nut masz przykład użycia tego callbacka po stronie klienta, a wygląda on tak:
Code:
local function deadHandler(pid)
{
    print ("Die: " + pid);

    if (pid == wolf)
    {
        unspawnNpc(pid);
        spawnWolf();
    }
}

addEventHandler("onPlayerDead", deadHandler);
No i tu masz 1 argument. ID stworzenia które zdechnie, jak widzisz to id jest printowane za każdym razem gdy umrzesz ty, lub wilk.

To znaczy że: Jeśli wilk zabije ciebie, to wyprintuje ci "Die: twoje id" a jeśli ty zabijesz wilka to wyprintuje ci "Die: id wilka"

no i masz warunek że jeśli ID zabitego to id wilka. To wtedy go odspawni i wywoła spawn spowrotem.

przykładowo:
 robisz sobie zmienną local wolf = null; to jest zmienna twojego wilka.
potem w onInit czyli po wejściu do gry sobie robisz takie coś: 
wolf = createNpc("wilk");
print("ID wilka to: "+wolf);
wyświetli "ID wilka to: id wilka"

czyli zmienna do której przypisujesz NPC zwraca jego id.

przeanalizuj se ten plik npc.nut


Ogólnie to Marko dobrze cie nakierował, aczkolwiek nie wiem czy serwer odczyta ID wyższe od max slotów skoro npc nie są zsynchronizowane.
Reply
#49
W przypadku kiedy popełnimy błąd przy tworzeniu wydarzenia w skrypcie, np. podamy błędną ilość argumentów, tak jak Ty to zrobiłeś, to nie otrzymamy żadnych błędów, ale i żadnych rezultatów, jeśli chodzi o instrukcje w nim umieszczone. Jedno jest pewne... Podajesz inny przykład, niż ten którego użyłeś lub w zaparte kłamiesz i marnujesz nasz czas. Umiesz czytać ze zrozumieniem? Nie ma opcji, by ten Twój przykład działał. Znasz w ogóle różnice pomiędzy stroną serwera, a klienta?

Używając tylko strony klienta możesz to zrobić tak:
Code:
function oPDclient(playerid){
    if(getPlayerName(playerid) == "Wilczek" && playerid >= 32){
        setLevel(heroId, getLevel() + 1);
    }//"heroId", to stała, która określa nasz identyfikator po stronie klienta
}addEventHandler("onPlayerDead", oPDclient);
Ten przykład ukazuje, jak zrobić, żeby otrzymywać poziom za każdego zabitego bota z nazwą Wilczek, który ma ID wyższe, niż 31, z tym, że wszyscy go dostaną.
Reply
#50
Wielkie dzięki Marko! I wszystkim za pomoc,właśnie o to mi chodziło ^^ ^^

PS:Tam ta funkcja działa ponieważ dodałem wcześniej po stronie servera i clienta funkcję setLevel,nie macie jej dodanej dlatego wam nie działa.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Lista zmian na 0.5 ThorusDagoth 2 1,746 17.10.2015, 19:39
Last Post: ThorusDagoth

Forum Jump:


Users browsing this thread: 1 Guest(s)