Paguba Medie si Paguba Competentei

Înainte de a posta o problemă, caută în acest forum și poate găsești rezolvare.
Închis
Avatar utilizator
MasterWoeful
Nou Venit

Nou Venit
Mesaje: 3
Membru din: 01 Noi 2014, 14:11
Server: Metin2 RH
Aprecieri: 2  
Mulţumiri: 2  
Medalii

Salut! Ma intrebam care este formula pentru a determina valoarea pc, cand se cunoaste pgm si invers. Nu am analizat fenomenul foarte mult, dar ma gandesc la faptul ca fie este o formula si pentru un nr x% pgm exista doar un y% pc, sau se genereaza numere in jurul unei formule ca si cea mentionata si se alege o valoare generata printr-un randomiser. Multumesc anticipat!
Avatar utilizator
Syron
Developer

Developer
Mesaje: 712
Membru din: 14 Mai 2014, 23:41
Aprecieri: 5  
Mulţumiri: 138  
Medalii

Te rog sa respecti modelul data viitoare.
Paguba medie si competenta sunt definite in void CItemAddonManager::ApplyAddonTo in item_addon.cpp.
Pe scurt, paguba medie este setata la 0 si apoi se calculeaza in functie de ce paguba competenta iese pe arma.
Paguba competenta se incadreaza intre -30 si 30. Aici este toata formula de calcul:

Cod: Selectaţi tot

	int iSkillBonus = MINMAX(-30, (int) (gauss_random(0, 5) + 0.5f), 30);
	int iNormalHitBonus = 0;
	if (abs(iSkillBonus) <= 20)
		iNormalHitBonus = -2 * iSkillBonus + abs(number(-8, 8) + number(-8, 8)) + number(1, 4);
	else
		iNormalHitBonus = -2 * iSkillBonus + number(1, 5);
E putin greu de inteles dar, gauss_random e folosit in loc de un random number generator pentru ca in programare e considerat 'mai accurate' decat un rng normal. (poti sa citesti pe net despre asta)
Ideea e ca se asigura mereu daca valoarea de la iSkillBonus e negativa aceasta o sa devina pozitiva, de asta -2 (cand iSkillBonus e negativ -> iNormalHitBonus devine pozitiv si vice-versa)

In general asta poate sa fie un sablon care poti sa-l modifici (functia de calcularea de paguba medie ultima e in plus ca sa fie accurate)

Cod: Selectaţi tot

	int iSkillBonus = MINMAX(PCminim, (int) (gauss_random(0, 5) + 0.5f), PCmaxim);
	int iNormalHitBonus = 0;
	if (abs(iSkillBonus) <= 20)
		iNormalHitBonus = -2 * iSkillBonus + abs(number(-8, 8) + number(-8, 8)) + number(1, 4);
	else
		iNormalHitBonus = -2 * iSkillBonus + number(1, 5);
	iNormalHitBonus = MINMAX(PMminim, iNormalHitBonus, PMmaxim);
PMminim si PMmaxim sunt valori strict pozitive.
Pentru acest mesaj, Syron for the post:
MasterWoeful
Avatar utilizator
[RaKu]
Membru Club

Membru Club
Mesaje: 2137
Membru din: 30 Noi 2016, 21:49
Regat: Jinno
Aprecieri: 202  
Mulţumiri: 424  
Discord: Copiază ID
Medalii

Rezolvat! topic mutat probleme rezolvate.
Închis
Răspunsuri
3
Vizualizări
915
Răspunsuri
2
Vizualizări
635
Răspunsuri
0
Vizualizări
178

Înapoi la “Probleme rezolvate”

  • Informaţie
  • Cine este conectat

    Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 26 vizitatori