

Bref, c'est trop obscure/scabreux et c'est un sujet sensible, j'ai vraiment pas envie d'y toucher.
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.
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)
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;$_$;
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;$$;