Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  15 1572
Hei!

Driver med noe enkel .LUA programmering for et spill jeg spiller, men har satt meg litt fast. Har prøvd å finne en løsning på google i en times tid nå, men har gitt opp.

Spillet har en rekke forskjellige ferdigheter som har verdien lagret i følgende variabler:

$distance
$fist
$axe
$sword
$club

Det jeg ønsker å gjøre er å finne ut hvilken av variablene som er høyest, og vise bare den verdien.

F.eks.: "Axe skill - 85"

Har klart å finne den høyeste verdien ved å bruke:

DisplaySkill = math.max($distance, $fist, $axe, $sword, $club)

Problemet mitt er å finne ut hvilken av variablene jeg har funnet verdien for, og returnere navnet på variabelen.

Noen som kan hjelpe?
Vet ikke om det er noe fornuftig løsning, men du kan jo alltids sammenligne DisplaySkill verdien med alle variablene dine for å sjekke om de matcher.

F.eks

if distance == DisplaySkill then
Do something
etc.
Takk for svar! Det går nok ann å gjøre det slik ja, tror jeg prøver å bruke det sånn midlertidig, hvis jeg ikke finner en mer elegant måte å gjøre det på.
Hva med å legge alle inn i en liste? Da kan du vel bare se hvor i listen maksverdien ligger.
▼ ... over en uke senere ... ▼
For det første heter det lua, ikke ".LUA", og heller ikke "LUA".
Er lenge siden jeg har sett på lua, men denne bør fungere:

Kode

function maximum (a)
  local mi = 1
  local m = a[mi]
  for i, val in ipairs(a),a,mi do
    if val > m then
      mi = i
      m = val
    end
  end
  return mi
end

SkillValue = {$distance, $fist, $axe, $sword, $club}
SkillName = {"Distance", "Fist", "Axe", "Sword", "Club"}
MaxSkill = maximum(SkillValue)
print(SkillName[MaxSkill] .. " skill - " .. SkillValue[MaxSkill])
Sist endret av TanteSpiker; 12. november 2011 kl. 20:20.
Sitat av boblehest Vis innlegg
For det første heter det lua, ikke ".LUA", og heller ikke "LUA".
Vis hele sitatet...
Strengt tatt heter det Lua, ikke lua.
Sitat av tormaroe Vis innlegg
Strengt tatt heter det Lua, ikke lua.
Vis hele sitatet...
Det går vel mer på rettskriving, og ikke på navnet. Av en eller annen grunn glemte jeg stor bokstav der ja.
Sitat av boblehest Vis innlegg
Det går vel mer på rettskriving, og ikke på navnet. Av en eller annen grunn glemte jeg stor bokstav der ja.
Vis hele sitatet...
Siden du også påpekte at det ikke het LUA følte jeg den var berettiget
▼ ... over en måned senere ... ▼
Takker for svar! Litt sent, men så ikke på tråden igjen før nå, ettersom hjelpen jeg fikk funket.

Nå sitter jeg med ett nytt problem jeg trenger hjelp til å løse!

Kode

ItemsToDeposit = {}
foreach settingsentry item 'Cavebot/Looting/ItemList' do
	table.insert(ItemsToDeposit, getsetting(item, '_name'):capitalizeall())
end
'Cavebot/Looting/ItemList' inneholder en rekker forskjellige gjenstander. Koden henter navnet på alle gjenstandene i listen, og legger de i en tabell.

Det er en gjenstand jeg ikke ønsker å ha med, og derfor vil jeg enten slette den etterpå, eller å forhindre at den blir lagt til.

Jeg vet ikke hvor i tabellen gjenstanden ligger, men den heter "gold coin". Hvordan hindrer jeg den i å bli lagt til?

Problem nr. 2:

Hver gjenstand i lista over gjenstander, inneholder en verdi som heter Destination.

Her er et eksempel:

Kode

setsetting('Cavebot/Looting/ItemList/Tower Shield/Destination', 'Dragon Backpack')
Jeg vil endre "destination" i alle gjenstander til "dragon backpack"

Her er tankene mine, men fungerer ikke:

Kode

ChangeBP = {}
foreach settingsentry item 'Cavebot/Looting/ItemList' do
	setsetting(Item, '_Destination', SuppliesBP)
end
Noen som har lyst til å hjelpe en liten noob?
"foreach" er helt ukjent for meg, tror ikke det er standard lua, så kan ikke hjelpe deg der.
Er kanskje ikke standard lua nei, men er ikke avansert i hvertfall. Betyr bare "for hver gjenstand i lista, gjør..."

Den siste delen med å endre destinasjon av ryggsekk fikk jeg til selv, men lurer forstatt på hvordan man hindrer at en gjenstand blir lagt til, eller hvordan man søker i en tabell etter hvilken variabel som inneholder en string. Noen hjelp der?
Det burde da ikke være spesielt vanskelig? Nå kan jeg ikke språket, men noe slikt som dette burde da fungere?

Pseudo-kode:

Kode

for each element in list:
    if name != 'gold coin':
        add item to itemstodeposit
Ev.

Kode

for each element in list:
    if name == 'gold coin':
        continue
    add item to itemstodeposit
Takk for hjelpen, nå har jeg kommet litt videre!

Har kommet fram til dette:

Kode

ItemsToDeposit = {}
foreach settingsentry item 'Cavebot/Looting/ItemList'  do
		if getsetting(item, '_name') ~= DontDepo[1] then
			table.insert(ItemsToDeposit, getsetting(item, '_name'):capitalizeall())
	end
end
DonDepo er en tabell der man legger til ting som ikke skal legges til i ItemsToDeposit.

Hvordan får jeg til å ikke legge til noen av verdiene i DontDepo, og ikke bare nummer 1, eller nummer 2, etc?
Må vel bli noe à la dette:

Kode

local function SearchTable(t, val)
  for _, v in ipairs(t) do
    if (v == val) then
      return true
    end
  end
  return false
end

ItemsToDeposit = {}
foreach settingsentry item 'Cavebot/Looting/ItemList' do
  local value = getsetting(item, '_name')
  if (SearchTable(DontDepo, value) == false) then
    ItemsToDeposit[#ItemsToDeposit +1] = value:capitalizeall()
  end
end
Sist endret av TanteSpiker; 26. desember 2011 kl. 16:15.
Kan du gi meg en kort forklaring på hvordan "for _, v in ipairs(t) do" fungerer? Jeg har sett det blir brukt en del ganger før, men har ikke skjønt forklaringen på hvordan det fungerer på engelsk. Det hadde vært superawsome hvis du kunne forklart kort Tusen takk for hjelpen!
ipairs begynner på table[1] og går til den finner en verdi som er nil (f.eks. om du har en tabell der t[3] er nil, så vil den stoppe der, selv om du har verdier "lenger bak" i tabellen.)

Den returnerer 2 verdier, indeks og verdi, jeg lagrer indeks i variabelen '_' fordi jeg ikke skal bruke den (det er vanlig i lua å kalle en variabel '_' om du ikke får bruk for verdien den får.)

Hva som egentlig skjer "bak teppet" når du bruker ipairs er litt mer avansert. Anbefaler deg å lese "Programming in Lua" om du er interessert i å lære språket.