Moi il y a plusieurs trucs qui me paraissent bizarres, dont:
On commence à faire la réduction des dégâts avec le compteur stocké sur le perso, mais je pense que ce compteur n'est pas mise à jour si le perso active sa DLT et régénère ou s'il est soigné.
La manière dont on borne à 4, est plus que douteuse (on calcul un compteur différentiel pour l'ajouter à la valeur actuelle, pourquoi ne pas calculer le compteur final ???)
Bref, c'est trop obscure/scabreux et c'est un sujet sensible, j'ai vraiment pas envie d'y toucher.
Réduction des dégâts PVP
Re: Réduction des dégâts PVP
~~ Le monde est partagé en 10 catégories de personnes, ceux qui comprennent le binaire et les autres. ~~
Re: Réduction des dégâts PVP
Bon eh bien si vous avez dans vos contacts les gens qui avaient bossé sur le PvP, c'est le moment de les invoquer ^^
à priori azaghal, Merrick... d'autres ?
je peux tenter un message à Merrick, mais pas sûr qu'il soit motivé à venir codé sur un problème touffu comme ça, mais bon comme on a dégrossit, ça va peut-être l'encourager à au moins nous donner un avis sur la direction à prendre à ce sujet, d'un point de vue technique.
à priori azaghal, Merrick... d'autres ?
je peux tenter un message à Merrick, mais pas sûr qu'il soit motivé à venir codé sur un problème touffu comme ça, mais bon comme on a dégrossit, ça va peut-être l'encourager à au moins nous donner un avis sur la direction à prendre à ce sujet, d'un point de vue technique.
Re: Réduction des dégâts PVP
Y a plein de trucs "bizarres" dans le pvp post réforme :pMarlyza a écrit : ↑20 avr. 2021 10:51Moi il y a plusieurs trucs qui me paraissent bizarres, dont:
On commence à faire la réduction des dégâts avec le compteur stocké sur le perso, mais je pense que ce compteur n'est pas mise à jour si le perso active sa DLT et régénère ou s'il est soigné.
La manière dont on borne à 4, est plus que douteuse (on calcul un compteur différentiel pour l'ajouter à la valeur actuelle, pourquoi ne pas calculer le compteur final ???)
Bref, c'est trop obscure/scabreux et c'est un sujet sensible, j'ai vraiment pas envie d'y toucher.
Et pas possible de savoir si ce sont des choses voulues par la team ou des effets de bords indésirables
Mais le temps et les soins sont sensés diminuer le compteur pvp:
16) qu'est ce qui fait modifier le compteur pvp à la hausse
La bonne réponse était : Subir des attaques ou sorts offensifs avec dégâts direct lancés par un aventurier engendrant une perte de point de vie sous un seuil
17) qu'est ce qui fait modifier le compteur pvp à la baisse
La bonne réponse était : Activer sa DLT ou un temps supérieur à une dla de la cible depuis la dernière action de la cible
Des soins suffisant pour changer le domaine de blessure (délimités par les seuils)
Eclate tout sur son passage
Re: Réduction des dégâts PVP
Ouai, tu as raison, il y a bien une baisse du compteur ailleurs du calcul des dégâts.
Baisse de 1 du compteur par activation de DLT
15 de difficulté de fuite supplémentaire par point du compteur
Recalcul du compteur après des soins
Recalcul du compteur sur modification des PV du perso.
Le compteur est aussi mis à jour en fonction des soins donnés par une dizaine de sorts runiques/divins
(je ne donne pas lesquels pour ne pas spoiler ceux qui ne les connaissent pas tous, mais ça inclus les sort de regains de PV par drain)
Donc ça enlève une grosse part d'ombre, malgré tout la mécanique est suffisamment compliquée, j'ai pas trop envie de toucher quoi que ce soit, les changements pourraient avoir un gros impact.
Code : Tout sélectionner
/* compteurs pvp */
select into v_compt_pvp
perso_compt_pvp
from perso
where perso_cod = personnage
and perso_dmodif_compt_pvp + (to_char(temps_tour,'99999999') || ' minutes')::interval < now();
if found then
if v_compt_pvp > 0 then
update perso
set perso_compt_pvp = perso_compt_pvp - 1,
perso_dmodif_compt_pvp = now()
where perso_cod = personnage;
end if;
end if;
Code : Tout sélectionner
/* pour les combats pvp difficulté de fuite */
select into v_compt_pvp perso_compt_pvp from perso
where perso_cod = num_perso;
v_malus_pvp := v_compt_pvp * 15;
v_competence_modifie := v_competence_init - malus_nb_persos - nb_lock_malus - v_malus_pvp;
Code : Tout sélectionner
CREATE FUNCTION public.soin_compteur_pvp(integer) RETURNS void
LANGUAGE plpgsql
AS $_$/*********************************************/
/* soin_compteur_pvp */
/* $1 = perso sur lequel on fait les soins */
/* Retour : void */
/*********************************************/
/* créé le 08/11/2009 par Blade */
/*********************************************/
declare
personnage alias for $1;
v_compt_pvp integer;
v_compt_pvp1 integer; -- ajout azaghal pour garde fou
v_pv integer;
v_pv_max numeric;
v_niveau integer;
begin
/*La fonction permet après des soins de recalculer le compteur pvp. A inclure dans toute fonction de soin */
select into v_compt_pvp,v_pv,v_pv_max
perso_compt_pvp,perso_pv,perso_pv_max
from perso
where perso_cod = personnage;
if ((v_pv/v_pv_max) < 0.20) then
v_niveau := 4;
elsif ((v_pv/v_pv_max) < 0.33) then
v_niveau := 3;
elsif ((v_pv/v_pv_max) < 0.66) then
v_niveau := 2;
elsif ((v_pv/v_pv_max) < 0.80) then
v_niveau := 1;
elsif ((v_pv/v_pv_max) >= 0.80) then
v_niveau := 0;
end if;
if v_compt_pvp < v_niveau then
v_niveau = v_compt_pvp;
end if;
update perso
set perso_compt_pvp = v_niveau
where perso_cod = personnage;
end;$_$;
Recalcul du compteur après des soins
Code : Tout sélectionner
CREATE FUNCTION public.trg_update_perso() RETURNS trigger
LANGUAGE plpgsql
AS $$/******************************/
/* Trigger pour mettre à jour */
/* la table de persos après */
/* modifications */
/******************************/
declare
blessures_old integer;
blessures_new integer;
temp numeric;
begin
-- En cas de soins, régénération, etc...
if (NEW.perso_pv > OLD.perso_pv and OLD.perso_pv > 0) then
temp := OLD.perso_pv / OLD.perso_pv_max;
blessures_old := floor(4 - 4*temp) + cast(temp < 0.15 as integer); -- On convertit le ratio en seuil de blessure
temp := NEW.perso_pv / NEW.perso_pv_max;
blessures_new := floor(4 - 4*temp) + cast(temp < 0.15 as integer);
-- On regarde si on a gagné des seuils.
if (blessures_old > blessures_new) then
NEW.perso_compt_pvp := max(0 , OLD.perso_compt_pvp + blessures_new - blessures_old);
end if;
end if;
return NEW;
end;$$;
Le compteur est aussi mis à jour en fonction des soins donnés par une dizaine de sorts runiques/divins
(je ne donne pas lesquels pour ne pas spoiler ceux qui ne les connaissent pas tous, mais ça inclus les sort de regains de PV par drain)
Donc ça enlève une grosse part d'ombre, malgré tout la mécanique est suffisamment compliquée, j'ai pas trop envie de toucher quoi que ce soit, les changements pourraient avoir un gros impact.
~~ Le monde est partagé en 10 catégories de personnes, ceux qui comprennent le binaire et les autres. ~~