Siemka. Ucze sie pisania w lua i napotka?em problem nad kt?rym siedze ju? d?u?szy czas. Przerabiam skrypt na myjnie. Fukcja po stronie serwera dzia?a?a do momentu a? doda?em setElementFrozen. Od tego momentu pokazuje b??d Bad argument @ "getPlayerOccupiedVechicle"[Expected ped at argument 1, got nil].
serwer
Nie musi, mo?e by? u clienta. Oczywi?cie lepiej zrobi? to po stronie serwera dla samych zabezpiecze?, ale na ten moment MTA ma takie zabezpieczenia, ?e cheatowanie nie jest mo?liwe.
Co do b??du, na przysz?o?? - je?li masz taki b??d to oznacza, ?e w pierwszym argumencie funkcja oczekiwa?a peda (czyli element MTA), a dosta?a nic (nil), tak?e debugujesz sobie zmienn?, kt?r? tam podstawiasz. Prawdopodobnie wynika to z tego co napisa? ju? Karolowatyy (funkcja jest przestarza?a), ale je?li nie, no to zacznij od wy?wietlenia co zwraca GetPedOccupiedVehicle za pomoc? np. outputConsole albo outputChatBox, bo je?li dostajesz nila, to co? nie tak pobierasz.
Bardzo dzi?kuje za wszystkie odpowiedzi. Przetestowa?em tak jak pisali?cie jednak zmiana funkcji nie przynios?a ?adnych efekt?w. Pokombinowa?em jeszcze troch? i zmieni?em addEventHandler("onserver",root,umyj) na addCommandHandler ( "wykonaj", umyj ) i w tym momencie funkcja dzia?a poprawnie. Dlaczego na addEventHandler nie dzia?a? Oczywi?cie poczyta?em o tym na mta wiki ale nie znalaz?em niczego co pomog?o by mi rozwi?za? ten problem.
Jeszcze raz wklejam tu kod
Client
myShader = dxCreateShader( "texture.fx" )
local kwota = 100
local x,y,z = 1911.2, -1776, 12
local Marker = createMarker(x, y, z, "cylinder", 5, 255, 0, 0, 150)
local blip = createBlip(1911.2, -1776, 12, 40)
function cleancar (thePlayer )
local vehicle = getPedOccupiedVehicle ( thePlayer )
if kwota<=getPlayerMoney(thePlayer ) then
if vehicle then
engineApplyShaderToWorldTexture( myShader, "vehiclegrunge256", vehicle )
engineApplyShaderToWorldTexture( myShader, "?emap*", vehicle )
triggerServerEvent ("onserver", thePlayer , umyj)
end
end
end
addEventHandler("onClientMarkerHit", Marker, cleancar)
Server side
ten dzia?a
addEvent("onserver",true)
local kwota = 100;
function umyj ( thePlayer)
local theVehicle = getPedOccupiedVehicle ( thePlayer )
if theVehicle then
local currentFreezeStatus = isElementFrozen (theVehicle)
local newFreezeStatus = not currentFreezeStatus
setElementFrozen ( theVehicle , newFreezeStatus )
fadeCamera ( thePlayer, false, 2.5, 0, 0, 0 )
setTimer ( fadeCamera, 2500, 1, thePlayer, true, 2.5)
outputChatBox ( "Witamy na myjni samochodowej!", thePlayer, 0, 255, 255, true )
end
end
addCommandHandler ( "wykonaj", umyj )
server side
A ten nie dzia?a
addEvent("onserver",true)
local kwota = 100;
function umyj ( thePlayer)
local theVehicle = getPedOccupiedVehicle ( thePlayer )
if theVehicle then
local currentFreezeStatus = isElementFrozen (theVehicle)
local newFreezeStatus = not currentFreezeStatus
setElementFrozen ( theVehicle , newFreezeStatus )
fadeCamera ( thePlayer, false, 2.5, 0, 0, 0 )
setTimer ( fadeCamera, 2500, 1, thePlayer, true, 2.5)
outputChatBox ( "Witamy na myjni samochodowej!", thePlayer, 0, 255, 255, true )
end
end
addEventHandler("onserver",getRootElement(),umyj)
Nie dzia?a, bo wysy?asz dane stricte clienckie do servera, czyli
triggerServerEvent ("onserver", player, umyj)
"player" to element, kt?rego server nie rozpoznaje (zgaduj?, ?e to localPlayer). Zmie? "player" na "resourceRoot", a na serverze wywal ca?kiem te "thePlayer" i zmie? to na client - nie dawaj tego jako argument funkcji, po prostu sama nazwaFunkcji(), a "w ?rodku" u?ywasz client zamiast "thePlayer".
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach