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

Wysłany: 2018-02-03, 23:21


Byl3mTu

nikt taki






Wiek: 24
Na forum: 4087 dni
Posty: 40
Nick w MP: BylemTu

Piwa: 36

Respekt: 50

Witam. Mam tabele i p?ki co zrobi?em, ?eby wybiera?o mi losowo skina z tej tabeli. Jak jednak zrobi?, ?eby bra?o po kolei z tabeli, a gdy dojdzie do ostatniego to od pocz?tku?

Kod:

mySkins = { 111, 67, 1, 100, 10, 213 }
local losowy = mySkins[math.random(1, #mySkins)]
setElementModel(thePlayer, losowy)


Stawiam piwko za pomoc!
To u g?ry to jedna sprawa.
Planuje zrobi?, ?e gracz stoi w blipie i za pomoc? dw?ch klawiszy ustawia sobie skina nast?pnego lub poprzedniego z tabeli. (tylko tutaj lekko skrypt do przebudowy, bo teraz jest onMarkerHit, a wtedy b?dzie musia?o by? onPlayerIsInMarker czy co? w ten dese? xD). W ka?dym razie druga sprawa to jak zrobi?, ?eby sprawdzi?o kt?rego skina z tabeli mam obecnie i wczyta?o poprzedniego?

Czy b?dzie potrzeba przebudowy tabeli? Mam na my?li zrobienie tak:
Kod:

mySkins = { [1] = 111,
[2] = 67,
[3] = 1 , <---
}

Zaznaczy?em te? jeden przecinek - czy jest on w tym miejscu konieczny?



//edit:
Kod:

function zmianaskina(thePlayer, matchingDimension)
if isElementWithinMarker(thePlayer, skinomarker) then
mySkins = { 111, 67, 1, 100, 10, 213 }
local losowy = mySkins[math.random(1, #mySkins)]
local account = getPlayerAccount(thePlayer)
if account then
setAccountData(account, "stats.skin",losowy)
setElementModel(thePlayer, losowy)
else
end
else
end
end
addCommandHandler("kolejny", zmianaskina)

W skr?cie: Jak zamieni? math.random na co?, ?eby bra?o skiny po kolei z tabeli, a nie dawa?o losowego?

Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-02-04, 00:23


Eitho







Wiek: 24
Na forum: 3489 dni
Posty: 330
Nick w MP: Eitho

Piwa: 746

Respekt: 256,5
Respekt: 256,5Respekt: 256,5Respekt: 256,5


mySkins = {11167110010213licz=0

function zmianaskina(thePlayer) 
    if isElementWithinMarker(thePlayerskinomarkerthen 
        if licz >= #mySkins then
            licz 0
        end
        licz=licz+1
        local account getPlayerAccount(thePlayer) 
        if account then 
            setAccountData(account"stats.skin"mySkins[licz]) 
            setElementModel(thePlayermySkins[licz]) 
        end 
    end 
end 
addCommandHandler("kolejny"zmianaskina

Gdyby? nie wiedzia? jak to dzia?a to pisz, postaram si? wyja?ni? (chocia? wyja?nianie kiepsko mi idzie XD).

Podpis
good old days :]
Postaw piwo autorowi tego posta
 

 
Więcej szczegółów
Wystawiono 1 piw(a):
Byl3mTu
Wysłany: 2018-02-04, 02:15


Byl3mTu

nikt taki






Wiek: 24
Na forum: 4087 dni
Posty: 40
Nick w MP: BylemTu

Piwa: 36

Respekt: 50

"Eitho" napisał/a:


Zaraz sprawdz? kod, kt?ry mi przes?a?e?. Dzi?ki z g?ry :P
Teraz kolejne dwa pytania odno?nie jak co? zrobi? z tabelami:

1. W tabeli mam takie pozycje(powiedzmy szpitali):

--Stan,x,y,z
szpitale = {
{"LV",1000,500,200},
{"LS",400,300,200},
{"SF",3000,200,100}
}


Gracz umiera, dzieje si? tak:
local x,y,getElementPosition(zgonowicz)


Jak zrobi?, ?eby skrypt przeliczy? do kt?rego szpitala z tabeli gracz ma najbli?ej i ?eby napisa?o outputChatBox'em nazw? tego szpitala?


2. Czy da si? ustali? szans? na drop losowej rzeczy z tabeli?
Przyk?adowo tabela:
--nazwa,szansa na drop
Samochody = {
{"Infernus"2%),
{"Bullet"3%),
{"Cheetah"5%),
{"Manana"90%)
}

Powiedzmy, ?e tutaj np. chcia?bym zrespi? losowy pojazd z tabeli, ale ?eby na 90% to by?a manana.

Bo teraz to jedyny pomys? jaki mi przychodzi na my?l to zrobi? tabele (bez %) i wstawi? Manan? 90 razy :P

Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-02-04, 12:19


Ciastuuś

Truck soon...






Wiek: 26
Na forum: 3071 dni
Posty: 799
Nick w MP: Ciastuuś

Piwa: 4297

Respekt: 640
Respekt: 640Respekt: 640

Do drugiego bym proponowa? jak najbardziej funkcje,


Więcej informacji znajdziesz w Wikipedii MTA:

Math.percent


Podpis
Truck soon...
Postaw piwo autorowi tego posta
 

 
Więcej szczegółów
Wystawiono 2 piw(a):
Byl3mTu, PitBull304
Wysłany: 2018-02-04, 20:57


Byl3mTu

nikt taki






Wiek: 24
Na forum: 4087 dni
Posty: 40
Nick w MP: BylemTu

Piwa: 36

Respekt: 50

Ciastuu?, a podasz dowolny przyk?ad jak u?y? tego? Najlepiej co? w stylu, ?e jest:
15% szans na print("fart")
85% szans na print("nie masz farta")

//Da si? co? pomno?y? w tabeli?
Przyk?adowo chcia?bym mie? 90% szans na trafienie Manany z Tabeli i 10% na Trafienie Infernusa to czy da si? zrobi? co? w tym stylu?:

tabelka = {
10*{"infernus"},
90*{"manana"},
}

Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-02-07, 01:14


PitBull304







Wiek: 30
Na forum: 3750 dni
Posty: 1
Nick w MP: PitBull



Respekt: 50

"Ciastuu?" napisał/a:

Do drugiego bym proponowa? jak najbardziej funkcje,


Więcej informacji znajdziesz w Wikipedii MTA:

Math.percent


Mam podobny a raczej du?o wi?kszy problem. Czy mo?na skontaktowa? si? z Tob? poza forum? Niestety nie mog? na PW a bardzo zale?y mi na kontakcie bo wydaje mi si?, ?e mo?esz mi pom?c.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-02-07, 02:46


Toffiaaak.







Wiek: 23
Na forum: 4410 dni
Posty: 128
Nick w MP: Toffy.

Piwa: 1836

Respekt: 242
Respekt: 242Respekt: 242

"Byl3mTu" napisał/a:

Ciastuu?, a podasz dowolny przyk?ad jak u?y? tego? Najlepiej co? w stylu, ?e jest:
15% szans na print("fart")
85% szans na print("nie masz farta")

//Da si? co? pomno?y? w tabeli?
Przyk?adowo chcia?bym mie? 90% szans na trafienie Manany z Tabeli i 10% na Trafienie Infernusa to czy da si? zrobi? co? w tym stylu?:

tabelka = {
10*{"infernus"},
90*{"manana"},
}


Ja to zrobi?em w taki spos?b:
function math.percent(percent,maxvalue)
    if tonumber(percent) and tonumber(maxvaluethen
        return (maxvalue*percent)/100
    end
    return false
end

tabelka = {
    {vehicle="Infernus"chance=10},
    {vehicle="Manana"chance=60},
    {vehicle="Faggio"chance=30},
}

function losuj(plr)
    percenttable={}
    vehicletable={}
    for i,v in ipairs(tabelka) do
        local rand=math.random(100)
        local percent=math.percent(rand,v.chance)
        table.insert(percenttablepercent)
        table.insert(vehicletable, {vehicle=v.vehiclechance=percent})
    end
    table.sort(percenttable, function(a,b) return b end)
    for i,v in ipairs(vehicletable) do
        if v.chance == percenttable[1then
            outputChatBox("Wygrana: "..v.vehicleplr02550)
            outputChatBox("ID modelu: "..getVehicleModelFromName(v.vehicle), plr02550)
        end
    end
end
addCommandHandler("losuj"losuj)


/edit:
@down
by?em akurat w trakcie edycji postu, pr?bowa?em par? sposob?w w tym czasie, w sumie nie wpad?oby mi takie wykonanie na my?l.
/edit2:
tamten post by? jedynie pomy?k?, ?le przeczyta?em o co chodzi autorowi, zaraz po tym usun??em tamten post.

Podpis

Osiągnięcia:
- wygrana w konkursie LUA (kat. średnia) - 05.02.18
- 150 reputacji - 06.02.18
- 100 postów - 06.02.18

Ostatnio zmieniony przez Toffiaaak. 2018-02-07, 03:39, w całości zmieniany 4 razy  
Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-02-07, 02:54


Tey







Wiek: 31
Na forum: 4876 dni
Posty: 155
Nick w MP: l0nger

Piwa: 280

Respekt: 193
Respekt: 193Respekt: 193

"Toffiaaak." napisał/a:

"Byl3mTu" napisał/a:

Ciastuu?, a podasz dowolny przyk?ad jak u?y? tego? Najlepiej co? w stylu, ?e jest:
15% szans na print("fart")
85% szans na print("nie masz farta")

//Da si? co? pomno?y? w tabeli?
Przyk?adowo chcia?bym mie? 90% szans na trafienie Manany z Tabeli i 10% na Trafienie Infernusa to czy da si? zrobi? co? w tym stylu?:

tabelka = {
10*{"infernus"},
90*{"manana"},
}

tabelka = {
["Infernus"] = 10,
["Manana"] = 90,
}

--[[ przyk?adowe odczytanie z tabeli:
print(tabelka["Infernus"])
--]]


Licz? na rep+, pozdrawiam ;)

To mu pomogles, autorowi bardziej chodzilo o liczbe losowa a nie stala.
Moj kod dziala na zasadzie prawdopodobienstwa, mozna go skrocic do mniejszej postaci, ale mysle ze ten Ci jak na razie wystarczy.


Zamiast liczby wpisujesz "procent" prawdopodobienstwa wylosowania danego itemu z tabeli.

local chances={
  ["infernus"]=2,
  ["manana"]=80,
  ["nic"]=20,
}

function losuj()
  local list={}
  for thingpercentage in pairs(chances) do
    for i=1percentage do
      table.insert(list, thing)
    end
  end
  return list[math.random(#list)]
end

outputChatBox("wylosowales: "..tostring(losuj())) -- wylosowany item


Postaw piwo autorowi tego posta
 

 
Tagi: kolejny :: lub :: poprzedni :: skin :: tabeli
Anonymous





Na forum: 245 dni
Posty: 1



Anonymous Koniecznie zajrzyj na:






Skocz do:  
Wyświetl posty z ostatnich:   
GTAONLINE.PL » JĘZYKI PROGRAMOWANIA » LUA » Kolejny lub poprzedni skin z tabeli 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