mommytellme Posted March 26, 2014 Share Posted March 26, 2014 Cześć, ja znowu z kolejnym problemem Ten polega na tym że zacząłem robić skrypt na BW, i póki co to zwykły eventhandler i jedna funkcja, ale już jest problem. Chodzi o to że napis informujący o byciu zabitym pojawia się wszystkim, a nie tylko osobie zabitej. Zawartość kodu: function BW ( player ) outputChatBox("Zostałeś/aś zabity/a! Do czasu przyjazdu pogotowia które Cię uleczy będziesz miał/a stan BW", player, 255, 000, 000, true) end addEventHandler("onClientPlayerWasted", root, BW) Takie tam proste. próbowałem z "source" zamiast player ale efekt był taki sam. Link to comment
WhoAmI Posted March 26, 2014 Share Posted March 26, 2014 Wiadomości po stronie clienta są zawsze wysyłane dla jednego gracza i nie potrzebny elemnt jako argument funkcji outputChatBox Link to comment
mommytellme Posted March 26, 2014 Author Share Posted March 26, 2014 Dalej nie działa, jeśli ktoś zginie to napis wyświetla się wszystkim, usunąłem tylko z outputChatBox "true" i "player" ale i tak to nic nie dało. Napis ma się wyświetlić tylko dla osoby zabitej, a ja idę zobaczyć jak rozwiązali to w XyzzyRP //Edit tam jest to rozwiązane chyba tak samo, zawartość death_c z XyzzyRP: (Nie wiem czy mogę udostępnić, jeśli nie mogę napiszcie to usunę) --[[ @author RootKiller @copyright 2011-2013 Lukasz Biegaj @license GPLv2 @package MTA-XyzzyRP @link [url=https://github.com/lpiob/MTA-XyzzyRP]https://github.com/lpiob/MTA-XyzzyRP[/url] GitHub ]]-- local sx,sy = guiGetScreenSize() local death = {} function dli(x,a,b,c) if (x==1) then return a end if (x%10>1) and (x%10<5) and (not ((x%100>=10) and (x%100<=21))) then return b end return c end function bwUpdate() local toBwEnd = (getElementData(getLocalPlayer(), "bwEndTime")-getTickCount()) local x, y, z = getElementPosition ( getLocalPlayer () ) -- setCameraMatrix ( x + 10, y + 10, z + 15, x, y, z ) setCameraMatrix(x-(10 * math.sin(toBwEnd/40000)),y+(10 * math.cos(toBwEnd/40000)),z+15,x,y,z) if(toBwEnd <= 1) then outputChatBox("Żyjesz! Lecz masz tylko 1hp udaj się do szpitala po leki.") triggerEvent("onBwFinish", getRootElement()) removeEventHandler("onClientRender", getRootElement(), bwUpdate) return end local timeInt = math.floor(toBwEnd/1000) local timeStr = (timeInt >= 60 and dli(timeInt/60+1, "minuta", "minuty", "minut") or dli(timeInt, "sekunda", "sekund", "sekund")) local text = "Do końca BW pozostało " .. tostring(math.floor((timeInt >= 60 and timeInt/60+1 or timeInt))) .. " " .. timeStr local fX = (sx/2)-(dxGetTextWidth(text, 2)/2) local fY = (sx/2)-200 dxDrawText(text, fX + 1, fY, fX + 1, fY, tocolor(0, 0, 0, 255), 2) dxDrawText(text, fX - 1, fY, fX - 1, fY, tocolor(0, 0, 0, 255), 2) dxDrawText(text, fX, fY + 1, fX, fY + 1, tocolor(0, 0, 0, 255), 2) dxDrawText(text, fX, fY - 1, fX, fY - 1, tocolor(0, 0, 0, 255), 2) dxDrawText(text, fX, fY, fX, fY, tocolor(255, 255, 255, 255), 2) end addEventHandler("onClientPlayerWasted", getRootElement(), function(killer, weapon, bodypart) if(source == getLocalPlayer()) then local abs=getElementData(source,"abseiling") if abs and abs~="" then return end local bwSeconds = 10 if bodypart == 9 then -- głowa bwSeconds = (10 * 60) elseif bodypart == 9 then -- tyłek bwSeconds = (2 * 60) elseif tonumber(bodypart) and (tonumber(bodypart) >= 5 and tonumber(bodypart) <= -- s8) --> then -- kończyny bwSeconds = (5 * 60) elseif bodypart == 3 then -- klatka piersiowa bwSeconds = (5 * 60) else bwSeconds = (5 * 60) end setElementData(getLocalPlayer(), "bwEndTime", getTickCount()+(bwSeconds * 1000)) triggerEvent("onGUIOptionChange", getRootElement(), "grayscale", true) addEventHandler("onClientRender", getRootElement(), bwUpdate) fadeCamera ( false, 1.0, 0, 0, 0 ) setTimer ( fadeCamera, 2000, 1, true, 0.5 ) death.heartBeat = playSound("audio/heartbeat.mp3", true) end end ) addEvent("onBwFinish", true) addEventHandler("onBwFinish", getRootElement(), function() setCameraTarget(getLocalPlayer()) destroyElement(death.heartBeat) triggerServerEvent("onPlayerFinshBW", getLocalPlayer()) triggerEvent("onGUIOptionChange", getRootElement(), "grayscale", false) removeEventHandler("onClientRender", getRootElement(), bwUpdate) end ) addEventHandler ( "onClientPlayerDamage", getRootElement(), function() if(source == getLocalPlayer()) then fadeCamera ( false, 1.0, 255, 0, 0 ) setTimer ( fadeCamera, 500, 1, true, 0.5 ) end end ) Link to comment
WhoAmI Posted March 26, 2014 Share Posted March 26, 2014 outputChatBox("Żyjesz! Lecz masz tylko 1hp udaj się do szpitala po leki.") Jak widzisz, funkcja outputChatBox jest wykonywana TYLKO dla gracza lokalnego, czyli localPlayer. Na przykład ouputChatBox ( "wiadomość", 255, 255, 255, true ) Wyświetli wiadomość dla gracza, dla którego wykonywana jest funkcja, czyli gracza lokalnego. Zastosowanie w komendzie addCommandHandler ( "napisz", -- dodajemy komende function ( cmd ) ouputChatBox ( "WIadomość wyświetlona dla gracza, który użył komendy /napisz" ) -- outputujemy wiadomość end ) Funkcje używane w komendzie są wykonywane głównie dla jednego gracza, przeciwnie po stronie servera, gdzie koniecznością jest podanie gracza w argumencie funkcji outputChatBox. Link to comment
Wojak Posted March 27, 2014 Share Posted March 27, 2014 To prawda że outputChatBox po stronie klienta będzie widoczne tlko dla teko klienta który wykonał funkcję, ale... event "onClientPlayerWasted" podczepiony do root będzie wykonywany gdy zginie KAŻDY gracz, nie tylko LocalPlayer, ale i "zdalni" gracze... Rozwiązania: - zamiast do root podczepić eventa do getLocalPlayer() lub - w funkcji podczepionej do ewenta sprawdzić czy source == getLocalPlayer() Link to comment
mommytellme Posted March 27, 2014 Author Share Posted March 27, 2014 Dziękuje Ci bardzo! Teraz działa Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now