dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

Loot algoritmi
Goto page 1, 2  Next
 
dev.gamez.lv Forum Index -> Programmēšana
View previous topic :: View next topic  
Author Message
Lynx
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 20 Jan 2003
Posts: 70
Location: Rīga

PostPosted: Fri Mar 28, 2008 9:56 am    Post subject: Loot algoritmi

Pie loota atkal apstājas manas zināšanas datorspēļu programmēšanā.

Īsumā es vēlos izveidot ir dinamisku resursu iegūšanas sistēmu, kas ņem vērā vairākus parametrus, šajā gadijumā par piemēru ņemšu metāla rūdas rakšanu no zemes.
Šis ir tas, ko tākā esmu izdomājis par sistēmu:

* Uz noteiktiem laukiem, var atrasties dažāda veida rūda ar dažādu daudzumu. (teorētiski jo vairāk konkrētās rudas uz lauka, jo lielāka iespēja viņu izrakt)
* Katrai rūdai ir minimālais prasmes līmenis, kas nepieciešams, lai viņu sāktu rakt, piemēram, ja nepieciešamā prasme ir 20, tad 100% iespēja izrakt būs pie 120 prasmes.

Un te nu parādās visa algoritma problēma, izskatās, ka man ir jaapvieno 4i lielumi:
1) vai rūda pieejama(ir uz lauka, pietiek prasme);
2) kāda ir mūsu tīrā procentuālā iespēja šo rūdu izrakt(ņemts no mūsu prasmes + rīka bonusa);
3) cik daudz rūdas pieejams(tas mainītu procentuālās iespējas);
4) Ieviest iespēju neko neizrakt(lielākais jautājums šeit, kā pareizi izveidot).

Ko es esmu dabūjis gatavu:

Pirmais ir diezgan vienkārši mēs atlasam tās rūdas kuras ir pieejamas un ar tām arī tālāk operējam algoritmā.

Procentuālo iespēju izrakt man bija šāda ideja, pieņemsim mums ir divas rūdas vienai minimālā prasme(min_skill) 0, otrai 30, mūsu prasme (our_skill) = 50.

(100 - min_skill) * (our_skill / 100)

100 * 0.5 = 50%
70 * 0.5 = 35%
15% fail

Te ir vienkārši, bet kas notiek, kad parādās vēl vairāk iespējamās rūdas? Kopējā iespēja aiziet līdz, piemēram, 140% un pazūd fails. Idejiski varbūt ieviest statisku fail chance uz our_skill 0 = fails 20%; 100 = fails 1%.

Un tālāk visas iespējas saskaitīt(pieņemsim 140) un taisīt rand(1, 140);
Un ja rand uzkrīt no 1-50 tad izrokam 1o rūdu, ja 50-85- 2tro etc. Tā parasti tiek darīts vai ir kāds savādāks veids?

Kā arī te parādās nepatīkama lieta šai te prasmu sistēmai, ja our_skill = 0 un min_skill = 0, tad iespēja izrakt ir 0. Teorētiski pat izskatās, ka jabūt rūdai ar min_skill -40, lai uz our_skill 0 būtu minimāla iespēja kaut ko izrakt. Noteikti jabūt kādam labākam variantam kā šo realizēt.

Un šajā visā jaiesaista vēl resursa daudzums uz lauka. Teorētiski vienkārši varētu modificēt iepriekšējo success chance, piemēram bija 50% tīrais, tālāk ja pieejamie resursi ir 350/1200 tas ir 29%, mēs šo te success 50% pareizinam ar 0.29 un iegūstam 14.5% galējo iespēju šo resursu izrakt. Jautājums vai nav pārāk brutāls samazinājums? Var realizēt maigāk?

((100 - min_skill) * (our_skill / 100)) * (tagad_resursi/max_resursi);

Un te nu sanāk manas pārdomas - haotiskas un nekonkrētas, tieši tapēc vajag jūsu palīdzību savilkt galus kopā. Dzirdēt jūsu viedokļus un idejas...
Paldies
Back to top
View user's profile Visit poster's website
Storm



Joined: 11 Apr 2006
Posts: 742

PostPosted: Fri Mar 28, 2008 11:45 am    Post subject:

Nu nee pameegini apmeeram sitaa

1) Vai pietiek skils lai sito loototu?
2) Apreekini starpiibu no minimaalaa nepieciesamaa loot skila liidz pasreizeejam -> Sim ir jaanosaka iespeeja dabuut SKILL papildus nevis nolootot iespeeju!
3) Loots -> Noteikts skaits procentu! Piemeeram 75 vai tamliidziigi, vari pielikt kaadu modiferi kas palielina vai samazina sito procentu
4) Viss!

Nu vismaz taa ir WoW es domaaju...
_________________
Izraadaas ka dazu dev.gamez.lv lietotaaju absurdaa ignorance meedz eksisteet arii augstaakas paakaapees : http://www.gamedev.net/community/forums/topic.asp?topic_id=411552
Back to top
View user's profile
Lynx
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 20 Jan 2003
Posts: 70
Location: Rīga

PostPosted: Fri Mar 28, 2008 12:07 pm    Post subject:

Hmm interesanti. Sanāk, ka pēc tam, kad esam apreiķinājuši visas lietas, kuras varētu nolūtot mēs taisam loopu un katrai lietai taisam rand() un skatamies vai izkrīt vai nē. Resursu gadījumā, piemēram rūdas, kur loģiski būtu izrakt tikai vienu rūdu, sākam no mazākās % vērtības un ejam uz lielāko un apstājamies uz pirmo trāpīto. Bet šeit īsti nešķiet pareizi, ka ar prasmi 100 mums ir tikpat liela iespēja izrakt konkrēto resursu kā ar prasmi 80, ja pieņemam, ka minimālā nepieciešamā prasme ir 40. Te varbūt var spēlēt zināmu nozīmi nākamais punkts, ko aizmirsu pirms tam pieminēt:

Attiecīgi: svarīgi ir arī cik daudz mēs izrokam. Piemēram izrakt pa vienam 1kg rūdas manuprāt būtu muļķīgi, vēl vairāk tas izpaužas zvejošanā, kur titku izmantota tā pati loota sistēma. Tapēc jaizdomā kāds labs veids kā balstoties no, piemēram, zivju daudzuma konkrētajā vietā un spēlētāja prasmes vai varbūt pat cik labs roll bija uz konkrēto zivi, apreiķināt cik daudz kg zivju noķer. Ir kādas idejas?

Vēl papētiju literatūru un lasīju par viļnveida funkcijām, ka atkarībā no rondom ģenerētas vērtības varoņa izveidošanas laikā mums loots mainās atkarībā no laika, kurā tiek veikta rakšana un panākam tādu kā cikliskumu: ka konkrētajai prasmei ir sausie periodi un atkal ļoti bagāti periodi. Tas liktu spēlētāiem parorientēties uz citu prasmju izmantošanu, ja konkrētā prasme ir jūtami samazinājusi atdevi. Jūsu viedoklis par šādu sistēmu? Netiek kaut kas pārlieku sarežģīts?
Back to top
View user's profile Visit poster's website
Storm



Joined: 11 Apr 2006
Posts: 742

PostPosted: Fri Mar 28, 2008 12:34 pm    Post subject:

Tu visu sarezgii un pat nelogisks tev tas algoritms sanaak - ja ir ruuda - tad tu vinju arii dabuu (ja pietiek skils) kapeec lai nedabuutu ruudu ja vinja ir un tu esi pietiekami prasmiigs lai dabuutu?
_________________
Izraadaas ka dazu dev.gamez.lv lietotaaju absurdaa ignorance meedz eksisteet arii augstaakas paakaapees : http://www.gamedev.net/community/forums/topic.asp?topic_id=411552
Back to top
View user's profile
Lynx
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 20 Jan 2003
Posts: 70
Location: Rīga

PostPosted: Fri Mar 28, 2008 5:56 pm    Post subject:

Jo pieņemsim, ka ir viens 1m^3, kas pildīts ar dažādu rūdu. 50% ir tīra zeme vai metāls par kuru tu nezini un nevari izmantot. 5% ir zelts un 45% ir bronza.

Tagad ar prasmi 50 tu beidzot iemācies izrakt zeltu un loģiski, ka tavs mērķis būtu sarakt maksimāli daudz zelta, jo viņš ir vērtīgāks. Un ir tikai loģiski, ka ar prasmi 70 tev ir daudz lielāka iespēja izrakt zeltu nekā ar 50. Jo balstoties uz iegūto pieredzi, tu zini visticamāko zelta atrašanās vietu, dažādus knifus utt, kas to padara vieglāku viņa izrakšanu. Bet nevienmēr tu vari notrāpīt uz metāla un nākas rakt arī zemi, lai piekļūtu tālāk atrodošajam metālam un tas jau skaitās kā fails.

+ šīs te iespējas neizrakt ir ģeniāli slēptie money sinks(īsti nezinu kā latviski). Pieņemsim, ka ļoti kvalitatīvam rīkam ir 100 izturība un viņs maksāja 300 monētas. Sanāk katrs cirtiens maksā 3 monētas, ja tu failo 20 reizes tu atgriez spēlei atpakaļ 60 monētas. Uz vienu spēlētāju teorētiski nekas, bet kad tev ir simts spēlētāji, kas dažādās pasaules vietās tērē rīkus, kopā sanāk jau ļoti jauka summa, kas aiziet prom no spēlētāju ekonomikas. Un inflācija ir ļoti smaga problēma ar ko esmu pārliecināts, ka dabūšu vēl saskarties.
Back to top
View user's profile Visit poster's website
Tenjou



Joined: 22 Nov 2005
Posts: 275

PostPosted: Fri Mar 28, 2008 6:09 pm    Post subject:

hint: neiesaku likt bronzu kā rokamu rūdu, jo ir vara un alva sakausējums.
Back to top
View user's profile
Lynx
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 20 Jan 2003
Posts: 70
Location: Rīga

PostPosted: Fri Mar 28, 2008 7:07 pm    Post subject:

Hah, labs paldies. Iekš Ultima Online ir iespējams pa taisno izrakt bronzu. No tā arī vadījos. Vismaz būs vēlviens solis craftingam - veidot bronzas stieņus no izraktās alvas un vara.
Back to top
View user's profile Visit poster's website
Vilx-



Joined: 10 Nov 2007
Posts: 34

PostPosted: Sat Mar 29, 2008 5:24 pm    Post subject:

Mazliet tomēr neizprotu to Tavu iecerēto sistēmu. Pamēģini viņu aprakstīt konkrētāk.

Piemēram, pāris neskaidrības:
  1. Daudzums:
    • Vai uz lauciņa ir ierobežots resursu daudzums, kurš samazinās pēc katra veiksmīgā rakšanas mēģinājuma? Ja tā, tad vai "zemes" daudzums arī samazinās, pēc neveiksmīgajiem rakšanas mēģinājumiem?
    • Vai izraktā resursa daudzums ir atkarīgs no skilla?
  2. Daudzveidība:
    • Uz lauciņa vienlaicīgi ir vairāki resursi?
    • Vai rakšanas mēģinājumam ir noteikts, ko tieši mēģina izrakt, vai arī dabon to, kas sanāk?
    • Ja dabon to, kas sanāk, tad vai var gadīties, ka dabon vairākus resursus vienlaicīgi? Kā tas iet kopā ar izrakto resursu daudzumu?
  3. Skilli:
    • Vai spēlētajam ir vairāki skilli, pa vienam katrai rūdai, vai arī globāls "rakšanas" skills?
    • Vai grūtības līmenis ir norādīts katrā lauciņā katram individuālajam rūdas gabaliņam, vai arī vienkārši visa zelta rūda ir ar konkrētu grūtības līmeni?
Btw - ja jūties iesprūdis, paskaties uz DnD (Dungeons and Dragons) spēles noteikumiem. Tur ir ļoti daudz līdzīgu situāciju - piemēram, durvju mūķēšana.
Back to top
View user's profile
Storm



Joined: 11 Apr 2006
Posts: 742

PostPosted: Sat Mar 29, 2008 6:35 pm    Post subject:

1. Protams ka ierobezots! Kaads zemes daudzums? O_o No skila atkariigs tikai vai tu izroc vai nee, kaads daudzums? Daudzums ir laimes lieta, pilniigs randoms piem 1-3 mineraali, ja paveicaas (nu piem 5% - kaads kristaalins or smth)

2. Tas tev jaaliek pie taa "Daudzuma" Tu roc - un izlozee, kas tev kritiis un cik daudz, iespeejaam visaam jaabuut predefineetaam katrai "mineraalu" sugai. Vispaar tik daudz mulkiigi jautaajumi itkaa kaads tev buutu noteicis ka ir tikai 1 pareizas veids kaa nu tam visam jaabuut...

3. Ja tu gribi sarezgiit dziivi taisi vairaakus skilus, tikai atceries ka taadaa gadiijumaa praktiski atriit itemu bonusi... jo +5 mining ir vieglaak nekaa "100x +5 mining for mineral x" Tu nemaz neesi pateicis 1. kas par tipu speelei. Un visus mineraalus kopaa maukt ir stulbi anyway, tad jau nebuus nekaada interese skraidiit apkaart un mekleet kaadu specifisku mineraalu.
_________________
Izraadaas ka dazu dev.gamez.lv lietotaaju absurdaa ignorance meedz eksisteet arii augstaakas paakaapees : http://www.gamedev.net/community/forums/topic.asp?topic_id=411552
Back to top
View user's profile
Vilx-



Joined: 10 Nov 2007
Posts: 34

PostPosted: Sat Mar 29, 2008 8:17 pm    Post subject:

Paklau - cilvēks taču taisa spēli, kurā būs implementēts tieši viens variants, ne? Ja viņš vēl pats nav izdomājis, tad ir laiks to izdarīt, citādi nevar dot konkrētu atbildi! Gadījuma formulas jau var izdomāt daudz un dažādas! Ja gribi aprakstu konkrētam algoritmam, nospecificē, ko tam būs darīt!

Paskaidroju tuvāk par to daudzumu minot vairākus variantus, kā spēlē varētu tas būt implementēts.

Tev ir dots zemes pleķītis X, kurā ir pieejams zelts un sudrabs. Varianti:
  1. Pleķītī ir 3kg zelta, 5kg sudraba un 3000kg melnzemes. Kad kāds izrok 1kg zelta, tad pāri paliek tikai 2kg zelta, 5kg sudraba un 3000kg melnzemes. Eventuāli, ja raks gana daudz, tad pleķītī vairs nebūs nedz zelta, nedz sudraba. Jautājums - vai neveiksmīga rakšanas mēģinājuma gadījumā (tiek izrakts tikai 1kg melnzemes) samazinās kopējais melnzemes daudzums?
  2. Par pleķīti ir zināms, ka tajā ir 3% zelta, 5% sudraba, un 92% melnzemes, bet kopējais izrokamais daudzums nav ierobežots;
Par daudzveidību - Pieņemsim, ka spēlē ir pieejami 3 dažādi minerāli - zelts, sudrabs un dzelzs. Daži tipiskākie varianti, kā spēlē varētu būt uztaisīts:
  1. Katram lauciņam kartes veidošanas laikā tiek noteikts, kādi minerāli tur ir pieejami, vai arī lauciņš tiek atstāts tukšs;
  2. Tas pats kas a. gadījumā, bet lauciņam var būt piesaistīti arī vairāki dažādi minerāli vienlaicīgi (t.i. izrakt būs iespējams visus norādītos minerālus);
  3. Visos lauciņos ir pieejami visi minerāli;
  4. Katrā lauciņā pieejamie minerāli tiek noteikti uz labu laimi katru reizi, kad tiek rakts.
Par skillu - es ieteiktu domāt tā kā to dara DnD - lauciņam norādam "grūtību", bet spēlētājam norādam "skillu". Abi šie parametri veidojas formulu rezultātā no citiem parametriem - piemēram, lauciņa "grūtība" varētu būt atkarīga no zemes cietības, konkrētā minerāla "daudzuma" lauciņā, kā arī paša minerāla "grūtības koeficienta". Spēlētāja "skills" savukārt varētu būt atkarīgs no izmantotajiem instrumentiem, charactera skilliem, šobrīd aktīvajām burvestībām, u.t.t. Un beigu beigās var arī abiem parametriem pielikt zināmu random elementu. Kad beigās ir dabūti divi skaitļi - "grūtība" un "skills", tad var domāt tālāk, kādu formulu taisīt, kas no šiem abiem skaitļiem izdomātu, vai rakšanas mēģinājums izdevās, vai nē. Visas izmantojamās formulas un parametrus noteikti nāksies mainīt spēles balansēšanas laikā, citādi rakšana būs pārāk grūta vai pārāk viegla.
Back to top
View user's profile
Lynx
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 20 Jan 2003
Posts: 70
Location: Rīga

PostPosted: Sun Mar 30, 2008 10:43 am    Post subject:

Pašreizējais variants ir plānots šāds:

Par daudzumu:
    *Zināmi resursu daudzumi procentuāli, bet šķiet, ka nav jēgas likt to melnzemi iekšā, kaut kā savādāk jāapreiķina veids kā neizrakt neko. Jo piemēram zvejošanā tas tad īsti neder. Tātad sistēma būtu: 15% zelta, 35% sudraba, 50% varš. Rokot nesamazinās daudzums uz laukuma.
    *Ir doma, ka būtu jabūt izraktā resursa daudzumam atkarīgam no prasmes. Un iespējams arī cik effektīvi tika notrāpīts tieši uz šī resursa izrakšanu. Piemēram, ja knapi knapi pietika lai dabūtu zeltu, mēs iedodam mazāk, nekā ja ir 90% pārliecība, ka mēs viņu esam dabūjuši. Nešķiet, galīgi pareizs Storm piedāvātais variants uz rondom.
Daudzveidība:
    *Uz lauka vienlaicīgi ir vairāki resursi.
    *Dabūn to, kas sanāk(tieši tapēc vajag izdomāt effektīvu formulu, lai apreiķinātu ko tieši izrok).
    *Plānots, ka var izrakt tikai viena veida resursu vienā reizē.
Prasmes:
    *Globāla rakšanas prasme.
    *Un arī globāli nodefinēts grūtības līmenis katrai rūdai, pašlaik ir doma to balstīt uz minimālo nepieciešamo prasmi, kas vajadzīga, lai varētu rakt rūdu.
Back to top
View user's profile Visit poster's website
Vilx-



Joined: 10 Nov 2007
Posts: 34

PostPosted: Sun Mar 30, 2008 11:29 am    Post subject:

OK, nu jau daudz skaidrāks. Smile Pamazām jau sāk galvā noformulēties risinājums, bet vēl gribētos dzirdēt autora domas par dažām lietiņām:
  • Vai ir arī iespējams neko neizrakt?
  • Kādās robežās ir skilla vērtība? Vai vispār ir definētas augšējās/apakšējās robežas?
  • Tas pats par grūtības līmeņiem.
  • Vai skilla vērtība ir vesels skaitlis? (šim gan laikam nav pārāk būtiska nozīme)
  • Vai mēs paturam iespēju (lai arī niecīgu), ka arī pie perfekta (vai ļoti augsta) skilla neko neizdodas izrakt?
  • Vai mēs paturam iespēju (lai arī niecīgu), ka pie ļoti zema (vai vispār nekāda) skilla līmeņa izdodas izrakt visgrūtāko resursu?
Back to top
View user's profile
Storm



Joined: 11 Apr 2006
Posts: 742

PostPosted: Sun Mar 30, 2008 11:59 am    Post subject:

Izlasi sito rakstinju : http://www.gamasutra.com/php-bin/news_index.php?story=18038

Tu te galiigi nepareizaa virzienaa teemee -> vienkaarsiiba owns, sarezgiitiiba nekaadu fun nerada... Klausi 10 miljoniem.
_________________
Izraadaas ka dazu dev.gamez.lv lietotaaju absurdaa ignorance meedz eksisteet arii augstaakas paakaapees : http://www.gamedev.net/community/forums/topic.asp?topic_id=411552


Last edited by Storm on Sun Mar 30, 2008 2:26 pm; edited 1 time in total
Back to top
View user's profile
Vilx-



Joined: 10 Nov 2007
Posts: 34

PostPosted: Sun Mar 30, 2008 12:08 pm    Post subject:

Arī WoW taisītāji reiz saskārās ar tieši šiem pašiem vai līdzīgiem jautājumiem. Gala risinājums jau nebūs sarežģīts. Bet ir 10001 iespējams risinājums, un es vienkārši cenšos noskaidrot, kuru no tiem grib autors. Ar saviem jautājumiem es vienkārši iegūstu gana precīzu vēlamā algoritma aprakstu pēc kura tad es arī varu pateikt kādu (ne īpaši sarežģītu) formulu.

Pievienots: OK, izlasīju to rakstu. Kāda tam vispār ir saistība ar šo jautājumu??? Confused
Back to top
View user's profile
Lynx
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 20 Jan 2003
Posts: 70
Location: Rīga

PostPosted: Sun Mar 30, 2008 2:23 pm    Post subject:

Storm, pilnībā piekrītu Vilx- teiktajam. Gala risinājums tieši lietotājam būs ļoti vienkāršs: izvēlamies, kur rakt un ar ko un mums nāk dažādi izrakteņi, kas tur tik ir.

Un esmu pārliecināts, ka tam pašam WoW tieši loot algoritmi no monstriem ir relatīvi ļoti sarežģīti. Loot tables, ar algoritmu, kas parasti izmeta no monstra tieši to itemu, ko tu vari izmantot un tieši nomainīt veco ekipējumu un jauno. Vismaz man tāda sajūta bija, kad vēl sen atpakaļ testēju.

Par jautājumiem:
* Ir iespējams neko neizrakt.
* Prasmes ir no 0 - 100(iespējams vēlāk būs iespējams dabūt arī piemēram 120, izejot kādus sarežģītus questus or something).
* Grūtības līmeņi pēc mana tā varianta 1ajā postā sanāk no 0 līdz 95. Attiecīgi tas ir minimālais skills, lai varētu šo resursu rakt. Un vēlos uztaisīt, lai katrs skilla pieaugums palielina šo iespēju resursu izrakt.
* Daļskaitlis ar 5 zīmēm aiz komata. Vairāk gan izmantots lai apreiķinātu tālāko skill gainu. Manuprāt šajā gadījumā būtu jaizmanto tieši pilnais skaitlis, vai arī var paņemt 1o ciparu aiz komata.
* Jā - it sevišķi, ja tajā vietā ir tikai ļoti augsta ranga metāli.
* Ar pašreizējo ieplānoto sistēmu, tas nav iespējams. Attiecīgi nav pietiekami skills, nav arī iespēju vispār pieskarties konkrētajam resursam.
Back to top
View user's profile Visit poster's website
Display posts from previous:   
dev.gamez.lv Forum Index -> Programmēšana All times are GMT + 2 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group