Jump to content

Problem z onPlayerWasted.


Recommended Posts

Posted

Witam! Mam problem z moim skryptem na Arenę minigun. Po zabiciu gracza nie dodaje mi score ani pieniędzy.... a zabitemu graczowi czasami zostaje minigun.

function poZabiciu(napastnik) 
    if (napastnik) then 
        if (getElementType(napastnik)=="player") then 
            if getElementData(napastnik,"zabawa")==minigun then  
                if getElementData(source,"zabawa")==minigun then 
                --Dla napastnika 
                setPlayerMoney(napastnik,getPlayerMoney(napastnik)+500) 
                setElementData(napastnik,tonumber(getElementData(napastnik, "Score"))+1) 
                outputChatBox("Dostałeś 500$ i 1 score za wykończenie przeciwnika.",napastnik,27,224,89) 
                --Dla zamordowanego 
                takeWeapon(source,38) 
                setElementData(source, "zabawa", brak) 
                end 
            end  
        end 
    end 
end 
addEventHandler("onPlayerWasted",root,poZabiciu) 

Proszę o pomoc. Z góry thx.

Posted

Co przechowujesz w zmiennej minigun i co powinno znajdować się w getElementData(napastnik,"zabawa")?

Zabieranie broni w trakcie smierci nie ma żadnego znaczenia, prawdopodobnie bron nadawana mu jest przy lub tuż po respawnie.

Posted

Ma to wyglądać tak:

Gracz wpisuje /mg i wtedy ustawia mu (zabawa minigun) czyli setElementData(player, "zabawa", minigun) , losuje jeden z 4 spawnów na arenie i daje miniguna. Nie działa mi tylko dodawanie score i kasy po zabiciu przeciwnika.

Więc w getElementData powinien być minigun czyli getElementData(napastnik, "zabawa", minigun). Niewiem jak dokładniej wytłumaczyć .

Posted

Twoim problemem jest pewnie brak cudzysłowiów w linijce 4,5,12 (minigun i brak - to raczej nie zmienne, a więc wszędzie tam jest `nil`)

Multi theft auto tools - replace cars and peds, move your map or compile your Lua files online!

programista php rzeszów

Need free webhosting for your small site? PM me. Need help with portforwarding? PM me. Do not PM me asking for help with scripting.

Having problems with port forwarding? Send me pm, I can do whole thing for you using TeamViewer (already helped about 20 people, no worries)!

Posted

Więc w getElementData powinien być minigun czyli getElementData(napastnik, "zabawa", minigun). Niewiem jak dokładniej wytłumaczyć .

Zapewne masz na myśli, że w getElementData(napastnik, "zabawa") ma być "minigun", bo minigun bez cudzysłowów to nazwa zmiennej (której prawdopodobnie nie masz zdefiniowanej).

Pokaż nam fragment w kodzie gdzie robisz setElementData(napastnik, "zabawa")

Posted (edited)

No niech będzie moja strata... po usunięciu problemu usunę ztąd kod. Może nikt nie skopiuje..

Client:

...

Server:

...

Błagam pomóżcie.

Edited by Guest
Posted

Jak możemy Ci pomóc, skoro opisujesz inny błąd, a kod wklejasz inny.

Wcześniej Twój problem polegał na tym, że zapisywałeś string

  
setElementData(player,"zabawa","minigun") 
  

A odczytywałeś poprzez:

  
getElementData(napastnik,"zabawa")==minigun 
  

Zamiast:

  
getElementData(napastnik,"zabawa")=="minigun" 
  

Obecnie tego problemu nie ma, gdyż poprawiłeś go w międzyczasie.

.... a zabitemu graczowi czasami zostaje minigun.

Masz podpięte dwa handlery obsługujące onPlayerWasted.

Pierwszy nam właśnie pokazałeś i on przydziela kasę i usuwa setElementData(source, "zabawa").

Drugi respawnuje gracza.

Problem polega na tym, że błędnie założyłeś, że zawsze bedą wykonywać się w takiej kolejności. W sytuacji, w której ten drugi wykona się przed pierwszym, gracz zostanie zespawnowany na arenie (kod kliencki) a chwile później "zabawa" zostanie usunięta. Dlatego czasami minigun dawany jest po śmierci.

Ogólnie popełniłeś też błąd umieszczając kod spawnowania peda na arenie po stronie klienta. Funkcje takie jak setElementDimension i setElementInterior jeśli nie zostaną wykonane po stronie serwera, nie zostaną zsynchronizowane. W efekcie gracz albo nie będzie widział innych, albo inni nie bedą widzieli go, albo będą dziać się jeszcze inne dziwne rzeczy.

Proponuje Ci podejść do tematu od nowa i napisać całość po stronie serwera z wpięciem do posiadanych juz przez Ciebie funkcji respawnujących gracza po śmierci.

No niech będzie moja strata... po usunięciu problemu usunę ztąd kod. Może nikt nie skopiuje..

Cóż, pomyśl kiedyś o oddaniu społeczności czegoś w zamian za to co bierzesz. MTA to otwarty projekt i dzięki temu, że jest otwarty, jest taki potężny.

Posted
Pierwszy nam właśnie pokazałeś i on przydziela kasę i usuwa setElementData(source, "zabawa").

Problem w tym, że nie przydziela kasy.

Obecnie tego problemu nie ma, gdyż poprawiłeś go w międzyczasie.

Poprawiłem kiedy varez mówił o cudzysłowiach.. i dalej niedziała.

Cóż, pomyśl kiedyś o oddaniu społeczności czegoś w zamian za to co bierzesz. MTA to otwarty projekt i dzięki temu, że jest otwarty, jest taki potężny.

Właśnie chce to udostępnić...ale najpierw chce skończyć wszystkie zabawy (Chowany, Wojna Gangów, Wyścig, Derby, MG, Biegi i parę innych).

Pomożecie w pisaniu od nowa?

Posted

Pomożemy, ale póki co masz straszne podejście do wszystkiego, tj:

1) Bierzesz się z góry na zbyt skomplikowane rzeczy. Jeżeli zapominasz w losowych miejscach o cudzysłowiach to znaczy, że nie ogarniasz jeszcze tego na tyle, by napisać cokolwiek poza prostymi zabawami z kodem

2) Nie stosuj polskich nazw w kodzie, nigdzie. Tekst wyświetlany na menusach i innych może być po polsku (a może warto z góry założyć wielojęzyczność skryptu i przygotować sobie teksty chociażby w zmiennych), ale żadnych "zabawa" czy poZabiciu

3) Nazwa funkcji niech będzie krótka, ale niech określa też co robi (poZabiciu określa kiedy się wykonuje, ale nie wiadomo co robi, w dużym projekcie takie nazwy Cię zgubią)

4) Napisałeś 50 linijek kodu, na który ciężko się patrzy, a jednocześnie boisz się, że Ci go ktoś ukradnie - to jest związane z punktem pierwszym - wydaje Ci się, że umiesz i tworzysz coś niesamowitego, zapatrzenie w siebie na wczesnym etapie nigdy nikomu nie przyniosło nic dobrego (na późnym etapie zresztą też)

A więc wróć do podstaw (programowania ogólnie, poczytaj o KISS, DRY, o tworzeniu wcięć, ogólnie o językach programowania, czym są tablice, stringi, poczytaj tutoriale o LUA pod MTA, poznaj różnice między stroną klienta i serwera, dowiedz się jak debugować skrypty, a potem zacznij od prostych skryptów, takich zabaw, które na prawdziwy serwer się nie nadadzą, ale pomogą Ci zrozumieć synchronizację i inne tajniki MTA/Lua), a potem w razie problemów - zapraszamy po pomoc :)

Powodzenia!

Multi theft auto tools - replace cars and peds, move your map or compile your Lua files online!

programista php rzeszów

Need free webhosting for your small site? PM me. Need help with portforwarding? PM me. Do not PM me asking for help with scripting.

Having problems with port forwarding? Send me pm, I can do whole thing for you using TeamViewer (already helped about 20 people, no worries)!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...