Velge tilfeldig setning fra en liste

stemmer
3

Jeg har lekt med en .lua fil som passerer en tilfeldig setning med følgende linje:

SendChatMessage(GetRandomArgument(text1, text2, text3, text4), RAID) 

Mitt problem er at jeg har mye av setninger og en kodelinje er veldig lang faktisk.

Er det en måte å holde

text1
text2
text3
text3

i en liste et annet sted i koden (eller eksternt) og ringe en tilfeldig verdi fra hovedkoden. Vil gjøre opprettholde listen over tekstalternativer enklere.

Publisert på 08/09/2009 klokken 23:27
kilden bruker
På andre språk...                            


2 svar

stemmer
2

Du vil ha et bord å inneholde fraser som

phrases = { "tex1", "text2", "text3" }
table.insert(phrases ,"text4") -- alternative syntax
SendChatMessage(phrases[math.random(table.getn(phrases))], "RAID") 

Merk: getn får størrelsen på bordet; math.randomfår et tilfeldig tall (med et maks på størrelsen av setninger tabellen) og phrases[]syntaksen returnerer bordet elementet ved indeksen innsiden [].

Svarte 08/09/2009 kl. 23:49
kilden bruker

stemmer
3

For lister opp til et par hundre elementer, så det følgende vil fungere:

meldinger = {
    "Tekst1",
    "Text2",
    "Text3",
    "Text4",
    - ...
}
SendChatMessage (GetRandomArgument (Pakk ut (meldinger)), "RAID")

For lengre lister, vil du være godt tjent til å erstatte GetRandomArgumentmed GetRandomElementsom ville ta en enkelt tabell som sitt argument og returnerer en tilfeldig oppføring fra bordet.

Edit: Olle svar viser én måte at noe sånt GetRandomElementkan implementeres. Men det benyttes table.getnpå alle anrop som er foreldet i Lua 5.1, og dens erstatning ( table.maxn) har en kjøretids kostnad som er proporsjonal med antallet elementer i tabellen.

Funksjonen table.maxner bare nødvendig hvis bordet er i bruk kan ha manglende elementer i sin rekke del. Men i dette tilfelle en liste over elementer å velge mellom, er det sannsynlig å være noen grunn til å trenge å tillate hull i listen. Hvis du trenger å redigere listen under kjøring, kan du alltids bruke table.removetil å fjerne et element siden det vil også lukke gapet.

Med en garanti for ingen hull i rekken av teksten, så kan du iverksette GetRandomElementslik:

funksjon GetRandomElement (a)
    returnere en [math.random (#A)]
slutt

Slik at du sender meldingen som dette:

SendChatMessage (GetRandomElement (meldinger), "RAID")
Svarte 08/09/2009 kl. 23:49
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more