Zaloguj się by uzyskać pełen dostęp. Nie masz jeszcze konta? Założ je już teraz w kilka sekund.

Wysłany: 2017-03-31, 19:16


Qwertick

Coming soon...






Wiek: 23
Na forum: 3577 dni
Posty: 472
Nick w MP: Qwertick

Piwa: 2726

Respekt: 215,8
Respekt: 215,8Respekt: 215,8

Witam mam problem z mechanikiem chodzi mi g??wnie o GUI, poniewa? gdy wchodz? w marker to mi si? nie pokazuje prosz? o pomoc. W DB3 nie ma b??du.

Server:


createBlip(1924.66,-1866.15,13.5627,2,255,0,0,255,0,100)

local t createElement('text')
setElementPosition(t,1903.51,-1871.14,13.55+0.5)
setElementData(t,"name","Samoobs?ugowa\nNaprawa Pojazdu")

local t createElement('text')
setElementPosition(t,1903.63,-1857.14,13.56+0.5)
setElementData(t,"name","Samoobs?ugowa\nNaprawa Pojazdu")

local strefyNapraw={

   -- LS
  warsztatIdlewoodStanowsko11={
    cuboid={1910.76,-1870.64,13.29,359.7,359.6,89.6}, -- miejsce gdzie znajduje sipojazd
    mpos={1903.51,-1871.14,13.55}, -- pozycja markera w ktorym gracz bedzie stal aby naprawiac
    faction_id=3, -- id frakcji ktora ma do tego dostep
  },
  warsztatIdlewoodStanowsko12={
    cuboid={1910.32,-1857.18,13.29,359.7,0.0,88.9}, -- miejsce gdzie znajduje sipojazd
    mpos={1903.63,-1857.14,13.56}, -- pozycja markera w ktorym gracz bedzie stal aby naprawiac
    faction_id=3,
  },
}

for i,v in pairs(strefyNapraw) do
  v.cs=createColCuboid(v.cuboid[1], v.cuboid[2], v.cuboid[3], v.cuboid[4], v.cuboid[5], v.cuboid[6])
  v.marker=createMarker(v.mpos[1], v.mpos[2], v.mpos[3]-1"cylinder"1.232,200,0,50)
  setElementData(v.marker,"cs",v.cs)
  setElementData(v.marker,"faction_id",v.faction_id)
  
end

addEvent("naprawaElementu"true)
addEventHandler("naprawaElementu"resourceRoot, function(pojazdczesckoszt)
  outputDebugString("Naprawa elementu " .. czesc .. " za " .. koszt)
  takePlayerMoneyclientkoszt )
  if koszt>getPlayerMoney(clientthen
    return
  end

  if (czesc==-1then

    local vps={}
    local vds={}
    local vls={}

    for i=0,do          vps[i]=getVehiclePanelState(pojazd,i)     end
    for i=0,do          vds[i]=getVehicleDoorState(pojazd,iend
    for i=0,do          vls[i]=getVehicleLightState(pojazd,iend

    fixVehicle(pojazd)

    for i=0,do      setVehiclePanelState(pojazdivps[i])    end
    for i=0,do      setVehicleDoorState(pojazdivds[i])    end
    for i=0,do      setVehicleLightState(pojazdivls[i])    end

    triggerClientEvent(client"refreshVehicleData"resourceRootpojazd)
  elseif czesc>=and czesc<=6 then
    setVehiclePanelState(pojazdczesc0)
    triggerClientEvent(client"refreshVehicleData"resourceRootpojazd)
  elseif czesc>=10 and czesc<20 then
    local drzwi=czesc-10
    setVehicleDoorState(pojazddrzwi0)
    triggerClientEvent(client"refreshVehicleData"resourceRootpojazd)
  elseif czesc>=20 then
    local swiatlo=czesc-20
    setVehicleLightState(pojazdswiatlo0)
    triggerClientEvent(client"refreshVehicleData"resourceRootpojazd)
  end
end)

local warsztatyid = {
    [3]=true,
}

for i,v in ipairs(punkty_brania_kol) do
  v.marker=createMarker(v[1],v[2],v[3],"cylinder"v[4], 0,0,0,100)
  setElementData(v.marker"braniekola"true)
  setElementData(v.marker"faction:id"v.faction_id)
end


local function czyPracownikWarsztatu(gracz)
  local lfid=getElementData(gracz,"faction:id") or -1
  if not warsztatyid[lfidthen return false end
  return true
end

local function najblizszeKolo(gracz,pojazd)
  -- easy peasy
  local xg,yg,zg=getElementPosition(gracz)
  local najblizszeKolo=nil
  local najblizszeDist=1000

  local x,y,z=getElementPosition(pojazd)
  local _,_,rz=getElementRotation(pojazd)

  for i=1,do
    local rrz=math.rad(rz+45+(i-1)*90)
    local x+ (math.sin(-rrz))
    local y+ (math.cos(-rrz))
    if not najblizszeKolo or getDistanceBetweenPoints2D(x,y,xg,yg)<najblizszeDist then
      najblizszeDist=getDistanceBetweenPoints2D(x,y,xg,yg)
      najblizszeKolo=i
    end
  end
  -- ugly
  if not najblizszeKolo then return nil end
  if najblizszeKolo==4 then return 3
  elseif najblizszeKolo==3 then return 4 end
  return najblizszeKolo
end

local function zalozKolo(plr)

  local x,y,z=getElementPosition(plr)
  local _,_,rz=getElementRotation(plr)

  local rrz=math.rad(rz)
  local x+ (1.5 math.sin(-rrz))
  local y+ (1.5 math.cos(-rrz))

  local cs=createColSphere(x,y,z,2.5)
  local pojazdy=getElementsWithinColShape(cs,"vehicle")
  destroyElement(cs)
  if (#pojazdy~=1) then
    return false
  end

  -- okreslamykolo ktorego kola jest gracz

  local k1,k2,k3,k4=getVehicleWheelStates(pojazdy[1])
  if (k1==0) and (k2==0) and (k3==0) and (k4==0then return end
  local kolo=najblizszeKolo(plr,pojazdy[1])
  if not kolo then return end

  setPedAnimation(plr"MISC""pickup_box"1falsefalsetruetrue)
  toggleControl(plr"forward"false)
  setTimer(setPedAnimationProgress6001plr"pickup_box"0.5)
  setElementData(plr"blockSettingAnimation"true) --blokujemy ENTER
  if kolo==1 then
    k1=0
  elseif kolo==2 then
    k2=0
  elseif kolo==3 then
    k3=0
  elseif kolo==4 then
    k4=0
  end
  
  setTimer(setPedAnimation90001plr"ped""phone_in")
  setTimer(setPedAnimation93001plr)
  setTimer(setVehicleWheelStates90001pojazdy[1], k1k2k3k4)
  setTimer(setElementData90001plr"blockSettingAnimation"true)
  setTimer(toggleControl90001plr"forward"true)
  zabierzKolo(plr,9000)
end

function zabierzKolo(el,delay)
  local niesionyObiekt=getElementData(el,"niesioneKolo")
  if niesionyObiekt then
    
    if isElement(niesionyObiektthen
      if delay then
        setTimer(destroyElementdelay1niesionyObiekt)
      else
        destroyElement(niesionyObiekt)
      end
    end

    removeElementData(el,"niesioneKolo")
    setPedWalkingStyle(el,0)
    unbindKey(el"fire""down"zalozKolo)
    return true
  end
  return false
end



addEventHandler("onMarkerHit"resourceRoot, function(el,md)
  if not md or getElementType(el)~="player" then return end
  if not getElementData(source"braniekola"then return end

  if zabierzKolo(elthen return end

  local kolo=createObject(1098,0,0,0)
  setObjectScale(kolo0.7)
  setElementData(el,"niesioneKolo"kolo,false)
--  attachElements(koloel0,0.4,-0.2,0,0,90)
  bindKey(el"fire""down"zalozKolo)
  exports["bone_attach"]:attachElementToBone(koloel110.1,-0.1,0)
  setPedWalkingStyle(el,66)
end)

addEventHandler "onPickupHit"pickup, function(element)
    local result exports.MNSDB:dbGet("SELECT * FROM konta WHERE tuner=? and login=?"1getPlayerName(element))
    if #result > 0 then
        if getElementData(element"tunerfc"then
            exports.notyfikacje:outputNotificationBox(element"Zwolniles sie z pracy tunera."255,255255)
            setElementData(element"tunerfc"false)
        else
            exports.notyfikacje:outputNotificationBox(element"Zatrudniles sie na prace tunera."255,255255)
            setElementData(element"tunerfc"true)
        end
    else
        exports.notyfikacje:outputNotificationBox(element"Nie jestes zatrudniony jako Tuner SF w urzedzie!"25500)
    end
   end)--POGO!!!
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    --[[    
    
    myMarker3 createMarker( -2039.64,174.76,28.84-0.9'cylinder'1000)
    bra3 createObject 11416, -2038.88,178.76,29.8400)
function MarkerHit3  (hitPlayermatchingDimension)
local playera hitPlayer
local easing "OutBounce"
local time 5000
if getElementTypeplayera ) == "player" then
if isObjectInACLGroup'user.'..getAccountNamegetPlayerAccountplayera ) ), aclGetGroup"Mechanik" ) )  then  
moveObject bra3time, -2038.88,178.76,29.84-5.5000easing)
end
    end
        end


function MarkerLeave3 ()
local easing2 "OutBounce"
local time 5000
moveObject bra3time, -2038.88,178.76,29.84000easing2)
end
addEventHandler "onMarkerHit"myMarker3MarkerHit3 )
addEventHandler "onMarkerLeave"myMarker3MarkerLeave3 )
--]]


addEventHandler("onVehicleEnter"resourceRoot, function(plrseat)
    if seat == 0 then
        setElementFrozen(sourcefalse)
        setElementData(source"pojazd_paliwo"100)
    end
end)


Client:

local w_m={}



--utils
function math.round(numberdecimalsmethod)
        decimals decimals or 0
        local factor 10 decimals
        if (method == "ceil" or method == "floor"then return math[method](number factor) / factor
        else return tonumber(("%."..decimals.."f"):format(number)) end
end

function string:split(sep)
    local sepfields sep or ":", {}
    local pattern string.format("([^%s]+)"sep)
    self:gsub(pattern, function(cfields[#fields+1] = c end)
    return fields
end






w_m.wnd guiCreateWindow(496179637742"Naprawa Pojazdu"false)
w_m.btn_napraw guiCreateButton(14602300130"Napraw"false,w_m.wnd)

w_m.btn_zamknij guiCreateButton(334604293128"Zamknij"false,w_m.wnd)
w_m.lbl_info guiCreateLabel(0.60.83950.350.1327""truew_m.wnd)
w_m.lbl_costinfo guiCreateLabel(0.60.83950.350.1327""truew_m.wnd)
guiLabelSetHorizontalAlign(w_m.lbl_info"center"true)
guiLabelSetVerticalAlign(w_m.lbl_info"center")


w_m.grid guiCreateGridList(924618573false,w_m.wnd)
guiGridListSetSelectionMode(w_m.grid,1)
guiGridListSetSortingEnabled(w_m.grid,false)
w_m.grid_nazwa guiGridListAddColumn w_m.grid"Nazwa cz??ci"0.3 )
w_m.grid_stan guiGridListAddColumn w_m.grid"Stan cz??ci"0.3 )
w_m.grid_koszt guiGridListAddColumn w_m.grid"Koszt naprawy"0.3 )
guiSetVisible(w_m.wnd,false)

local naprawiany_pojazd=nil

local function kosztNaprawySilnika(v)
    local vhp=1000-getElementHealth(v)
    local cenapojazdu=getVehicleHandling(v).monetary or 10000
    local przebieg=(10000-math.min(getElementData(v,"przebieg") or 5000,9999))/10000
    return vhp/1000*cenapojazdu*przebieg*0.002 -- it's that simple
end

local function kosztNaprawyElementu(v)
    local cenapojazdu=getVehicleHandling(v).monetary or 10000
    local przebieg=(10000-math.min(getElementData(v,"przebieg") or 5000,9999))/10000
    return cenapojazdu*przebieg*0.002 -- it's that simple
end

local panele={
    [0]="Karoseria lewy prz?d",
    [1]="Karoseria prawy prz?d",
    [2]="Karoseria lewy ty?",
    [3]="Karoseria prawy ty?",
    [4]="Szyba przednia",
    [5]="Zderzak z przodu",
    [6]="Zderzak z ty?u"
}
local stanyPaneli={
    [0]="100%",
    [1]="74%",
    [2]="66%",
    [3]="33%",
    [4]="0%"
}
local nazwyDrzwi={
    [0]="Maska",
    [1]="Baga?nik",
    [2]="Drzwi lewy prz?d",
    [3]="Drzwi prawy prz?d",
    [4]="Drzwi lewy ty?",
    [5]="Drzwi prawy ty?"
}

local nazwySwiatel={
    [0]="?wiat?o lewy prz?d",
    [1]="?wiat?o prawy prz?d",
    [2]="?wiat?o lewy ty?",
    [3]="?wiat?o prawy ty?"
}

local function fillVehicleData(v)
    guiGridListClear(w_m.grid)
    do
    if getElementHealth(v) ~= 1000 then
        local row=guiGridListAddRow(w_m.grid)
        guiGridListSetItemText(w_m.grid,row1"Silnik",false,false)
        guiGridListSetItemData(w_m.grid,row1, -1)
        guiGridListSetItemText(w_m.grid,row2math.round(getElementHealth(v)/10).."%"falsetrue)
        guiGridListSetItemText(w_m.grid,row3math.round(math.abs(kosztNaprawySilnika(v))+2).." PLN"falsetrue)
    end
    
    end
    for i,panel in pairs(panele) do
    local stan getVehiclePanelState(vi)
    if stan ~= 0 then
        local koszt=kosztNaprawyElementu(v)*(getVehiclePanelState(v,i))/6
        local row=guiGridListAddRow(w_m.grid)
        guiGridListSetItemText(w_m.grid,row1panel,false,false)
        guiGridListSetItemData(w_m.grid,row1i)
        local stan=stanyPaneli[getVehiclePanelState(v,i)]
        guiGridListSetItemText(w_m.grid,row2stanfalsetrue)
        guiGridListSetItemText(w_m.grid,row3math.round(koszt+2).." PLN"falsetrue)
    end
    end
    -- drzwi
    for i=0,do
        local stan=getVehicleDoorState(vi)
        if stan==or stan==or stan==4 then
            local koszt=kosztNaprawyElementu(v)*2/6
            local row=guiGridListAddRow(w_m.grid)
            guiGridListSetItemText(w_m.grid,row1nazwyDrzwi[i],false,false)
            guiGridListSetItemData(w_m.grid,row1i+10)
            guiGridListSetItemText(w_m.grid,row2"0%"falsetrue)
            guiGridListSetItemText(w_m.grid,row3math.round(koszt+2).." PLN"falsetrue)
        end
    end
    for i=0,do
        local stan=getVehicleLightState(vi)
        if stan==1 then
            local koszt=kosztNaprawyElementu(v)*2/6
            local row=guiGridListAddRow(w_m.grid)
            guiGridListSetItemText(w_m.grid,row1nazwySwiatel[i],false,false)
            guiGridListSetItemData(w_m.grid,row1i+20)
            guiGridListSetItemText(w_m.grid,row2"0%"falsetrue)
            guiGridListSetItemText(w_m.grid,row3math.round(koszt+2).." PLN"falsetrue)
        end
    end


end


addEventHandler("onClientMarkerHit"resourceRoot, function(el,md)
    if not md or el~=localPlayer then return end


    local cs=getElementData(source"cs")
    if not cs then return end
    if getElementData(source"braniekola"then return end
   
    local pojazdy=getElementsWithinColShape(cs,"vehicle")

    if #pojazdy<1 then
        --outputChatBox("#cc0000Na stanowisku naprawczym nie ma ?adnego pojazdu!")
        --outputChatBox("#cc0000B??d")
        return
    end
    if #pojazdy>1 then
       outputChatBox("#cc0000Na stanowisku naprawczym znajduje si? zbyt wiele pojazd?w!")
        --outputChatBox("#cc0000B??d")
        return
    end
    allCost setTimer(function(plr) 
        
    end10000el)
    fillVehicleData(pojazdy[1])
    showCursor(true)
    guiSetEnabled(w_m.btn_naprawfalse)
    guiSetText(w_m.lbl_info,"")
    guiSetVisible(w_m.wndtrue)
    guiSetText(w_m.btn_naprawstring.format("Napraw (%s)"getVehicleName(pojazdy[1])) )
    naprawiany_pojazd=pojazdy[1]
end)

addEventHandler("onClientMarkerLeave"resourceRoot, function(el,md)
    if el~=localPlayer then return end
    guiSetVisible(w_m.wndfalse)
    showCursor(false)
    naprawiany_pojazd=nil
    if allCost and isTimer(allCostthen killTimer(allCostend
end)

addEventHandler("onClientGUIClick"w_m.btn_zamknij, function()
    guiSetVisible(w_m.wndfalse)
    showCursor(false)
    naprawiany_pojazd=nil
    if allCost and isTimer(allCostthen killTimer(allCostend
endfalse)

addEventHandler("onClientGUIClick"w_m.grid, function()
        guiSetText(w_m.lbl_info,"")
        selectedRowguiGridListGetSelectedItem w_m.grid) or -1
        if (selectedRow<0then
            guiSetEnabled(w_m.btn_napraw,false)
            return
        end
        
        local multirepair = {}
        local rows guiGridListGetSelectedItems(w_m.grid)
        for k,v in ipairs(rows) do
            if (k/== math.round(k/3)) then --kazde 3 wyniki sa takie samepomijamy je
                table.insert(multirepair,v)
            end
        end
        
        totalkoszt 0
        
        for k,v in ipairs(multirepair) do
            local koszt guiGridListGetItemText(w_m.gridv.row3)
            local koszt koszt:split(" PLN")
            local koszt tonumber(koszt[1])
            totalkoszt totalkoszt+koszt
        end
        
        guiSetText(w_m.lbl_infostring.format("W sumie do zap?aty: %s PLN",totalkoszt))
        guiSetEnabled(w_m.btn_naprawtrue)
end)

local napraw_lu=getTickCount()
    
addEventHandler("onClientGUIClick"w_m.btn_napraw, function()
    if getTickCount()-napraw_lu<1000 then return end

    if not naprawiany_pojazd or not isElement(naprawiany_pojazdthen return end

    selectedRowguiGridListGetSelectedItem w_m.grid) or -1
    if selectedRow<0 then return end
    local rows guiGridListGetSelectedItems(w_m.grid)
    
    local multirepair = {}
    --musimy sprawdzicczy gracz zaznaczyl KILKA rowowczy JEDEN  //karer - takie male udogodnienie
    for k,v in ipairs(rows) do
        if (k/== math.round(k/3)) then --kazde 3 wyniki sa takie samepomijamy je
            table.insert(multirepair,v)
        end
    end
    
    guiSetText(w_m.lbl_info,"")
    if #multirepair == 1 then
        local koszt guiGridListGetItemText(w_m.gridselectedRow3)
        local koszt koszt:split(" PLN")
        local koszt tonumber(koszt[1])
        if not koszt then return end
        if koszt<=0 then
        guiSetText(w_m.lbl_info,"Ta cz??? jest sprawna.")
        return
        end
        -- if koszt>getPlayerMoney(localPlayerthen
        -- guiSetText(w_m.lbl_info,"Nie masz tyle got?wki!")
        -- return
        -- end
        local czesc=guiGridListGetItemData(w_m.gridselectedRow1) -- numer panelu lub -1==silnik
        napraw_lu=getTickCount()
        triggerServerEvent("naprawaElementu"resourceRootnaprawiany_pojazdczesckoszt)    
    elseif #multirepair > 1 then
        for i,v in ipairs(multirepair) do
            local selectedRow v.row
            local koszt guiGridListGetItemText(w_m.gridselectedRow3)
            local koszt koszt:split(" PLN")
            local koszt tonumber(koszt[1])
            if not koszt then return end
            if koszt<=0 then
                break
            end
            -- if koszt>getPlayerMoney(localPlayerthen
            -- guiSetText(w_m.lbl_info,"Nie masz tyle got?wki!")
            -- return
            -- end
            local czesc=guiGridListGetItemData(w_m.gridselectedRow1) -- numer panelu lub -1==silnik
            napraw_lu=getTickCount()
            triggerServerEvent("naprawaElementu"resourceRootnaprawiany_pojazdczesckoszt)  
        end
    else
        outputDebugScript("lss-naprawapojazdow> inna wartosc countRows, should't happen.")
    end
endfalse)

-- triggerClientEvent(client"refreshVehicleData"resourceRootpojazd)
addEvent("refreshVehicleData"true)
addEventHandler("refreshVehicleData"resourceRoot, function(pojazd)
    naprawiany_pojazd=pojazd
    fillVehicleData(pojazd)
end)


Stawiam :piwo: oraz R* ;) :D

Podpis

Kontakt
Discord: Qwertick#1210

Postaw piwo autorowi tego posta
 

 
Więcej szczegółów
Wystawiono 1 piw(a):
Chrystek.
Wysłany: 2017-03-31, 19:36


Remix110

Pewna osóbka :3






Wiek: 40
Na forum: 3663 dni
Posty: 291
Nick w MP: GoodNight

Piwa: 15

Respekt: 51

A da?e? ?eby si? wy?wietla??

[ Dodano: 2017-03-31, 19:36 ]
(chodzi o GUI)

Podpis
pomogłem? :P Możesz dać piwko, przyda się na imprezę :D
Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-03-31, 19:38


Qwertick

Coming soon...






Wiek: 23
Na forum: 3577 dni
Posty: 472
Nick w MP: Qwertick

Piwa: 2726

Respekt: 215,8
Respekt: 215,8Respekt: 215,8

Tak jest to zrobione

Podpis

Kontakt
Discord: Qwertick#1210

Postaw piwo autorowi tego posta
 

 
Więcej szczegółów
Wystawiono 1 piw(a):
Chrystek.
Wysłany: 2017-03-31, 20:02


Remix110

Pewna osóbka :3






Wiek: 40
Na forum: 3663 dni
Posty: 291
Nick w MP: GoodNight

Piwa: 15

Respekt: 51

hmm
A to musi by? pod blipa?

Podpis
pomogłem? :P Możesz dać piwko, przyda się na imprezę :D
Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-03-31, 20:05


Qwertick

Coming soon...






Wiek: 23
Na forum: 3577 dni
Posty: 472
Nick w MP: Qwertick

Piwa: 2726

Respekt: 215,8
Respekt: 215,8Respekt: 215,8

Remix110, Ty ?lepy jeste?? Napisane jest
Wercio. napisał/a:

gdy wchodz? w marker


Podpis

Kontakt
Discord: Qwertick#1210

Postaw piwo autorowi tego posta
 

 
Więcej szczegółów
Wystawiono 1 piw(a):
Chrystek.
Wysłany: 2017-03-31, 20:19


Remix110

Pewna osóbka :3






Wiek: 40
Na forum: 3663 dni
Posty: 291
Nick w MP: GoodNight

Piwa: 15

Respekt: 51

createBlip(1924.66,-1866.15,13.5627,2,255,0,0,255,0,100)
a to to co?

Podpis
pomogłem? :P Możesz dać piwko, przyda się na imprezę :D
Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-03-31, 20:33


Qwertick

Coming soon...






Wiek: 23
Na forum: 3577 dni
Posty: 472
Nick w MP: Qwertick

Piwa: 2726

Respekt: 215,8
Respekt: 215,8Respekt: 215,8

Remix110, Ale ty jeste? g?upi to jest tworzenie blipu
 mpos={1903.51,-1871.14,13.55}, -- pozycja markera w ktorym gracz bedzie stal aby naprawiac

Polecam nauczy? si? czyta?.

Komentarz HazeMaFaze dodany 2017-03-31, 21:25Troche kultury, ochłoń
Podpis

Kontakt
Discord: Qwertick#1210

Postaw piwo autorowi tego posta
 

 
Więcej szczegółów
Wystawiono 1 piw(a):
Chrystek.
Tagi: mechanik
Anonymous





Na forum: 245 dni
Posty: 1



Anonymous Koniecznie zajrzyj na:






Skocz do:  
Wyświetl posty z ostatnich:   
GTAONLINE.PL » JĘZYKI PROGRAMOWANIA » LUA » Mechanik Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi

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
Dodaj temat do Ulubionych
Wersja do druku