Script de création de vendeurs
Bonsoir,

Voilà, je vais vous présenter un script qui va vous permettre de créer certains types de vendeurs très rapidement.
C'est un script SQL qu'il faudra configuréer avant d'éxécuter. Les objets seront ajoutés au vendeur selon certains paramètres de recherches, comme le type d'objet, le niveau de l'objet, la classe de l'objet, etc...

Je vous donnerais à la fin quelques configuration d'exemples.

Le script :
[code=sql]/* Créé par Khira.
* Création de vendeurs multi-version, toujours à jour par rapport à votre base de données.
* A réappliquer à chaque nouvelle version de votre base de données.
* Version actuelle du script : 3.0
* Merci de ne pas partager mon travail sans mon autorisation.
*/
DELIMITER |
DROP PROCEDURE IF EXISTS addNpcVendor|
DROP TABLE IF EXISTS `entry_sets`|
CREATE TEMPORARY TABLE `entry_sets` (
`entry` mediumint(8) unsigned NOT NULL default '0',
PRIMARY KEY (`entry`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8|
-- ----------------------------------------------------------------------------------------------------------------------------------------------
-- -------------------------------------------------------- Début Configuration ----------------------------------------------------------
-- ----------------------------------------------------------------------------------------------------------------------------------------------
SET @entry = 61002| -- Mettez un Id (entry) non utilisé pour votre nouveau PNJ.
-- Attention : Si il y a plus de 150 objets (limite client), un nouveau PNJ
-- sera créé avec l'ID entry + 1 et ainsi de suite.
-- Penser donc à prendre un Id avec les Ids suivants libres.
SET @displayId = 25674| -- DisplayId de votre PNJ.
SET @nameNpc = 'Elizabeth'| -- Nom du PNJ.
SET @faction = 0| -- Faction du PNJ : 1 pour l'alliance, 2 pour la horde, 0 pour les deux.
SET @subname = 'Montures'| -- Sous-nom de votre PNJ.
SET @healthNpc = 55000| -- Vie de votre PNJ. Mettre 0 pour générer une valeur au hasard.
SET @levelNpc = 80| -- Niveau de votre PNJ.
SET @deleteNpc = 1| -- Mettre sur 1 pour supprimer le PNJ si il existe.
-- Mettre sur 0 pour juste remplacer ce qu'il vend.
-- ------------------------------------------------------------------------------------------------------------------------------------------
-- ----------------------------------------------------- Configuration Avancée ------------------------------------------------------
-- ------------------------------------------------------------------------------------------------------------------------------------------
-- Vous pouvez modifier ces paramètres pour créer vo propres vendeurs selon
-- plusieurs critères de recherche d'items, comme l'emplacement dans l'inventaire
-- ou le niveau minimum requis.
SET @flagNpc = 128| -- Flag du PNJ, 128 pour vendeur.
SET @typeSearch = 2| -- Type de recherche des items ( 0, 1 ou 2 actuellement ).
-- Mettre -1 à @typeSearchItem1 ou @typeSearchItem2 pour ne pas prendre en compte le paramètre de recherche.
SET @typeSearchItem1 = 15| -- Si @typeSearch = 0, représente la place dans l'inventaire (inventoryType).
-- Si @typeSearch = 1, représente la classe (class) des objets à chercher.
-- Si @typeSearch = 2, non utilisé.
SET @typeSearchItem2 = 5| -- Si @typeSearch = 0, représente le niveau de l'objet minimum.
-- Si @typeSearch = 1, représente la sous-classe (subclass) de objets à chercher.
-- Si @typeSearch = 2, non utilisé.
INSERT INTO `entry_sets` (`entry`)
VALUES (665),(675),(211) -- Si @typeSearch = 2, mettez ici les IDs des sets d'armures que vous voulez ajouter
| -- Si @typeSearch <> 2, paramètre non utilisé.
-- ----------------------------------------------------------------------------------------------------------------------------------------------
-- ---------------------------------------------------------- Fin Configuration ------------------------------------------------------------
-- ----------------------------------------------------------------------------------------------------------------------------------------------

CREATE PROCEDURE `addNpcVendor`
(
IN entryNpc INT,
IN displayId INT,
IN healthNpc INT,
IN levelNpc INT,
IN nameNpc VARCHAR(255),
IN subname VARCHAR(255),
IN factionNpc INT,
IN npcflag INT,
IN typeSearch INT,
IN type1Item INT,
IN type2Item INT,
IN deleteNpc TINYINT(1)
)
lbl_addNpcVendor: BEGIN
DECLARE i INT DEFAULT 0;

IF entryNpc <= 0 OR displayId <= 0 OR nameNpc = '' THEN
SELECT 'Les paramètres sont incorrects, vérifiez la partie configuration du script.' AS 'Erreur';
LEAVE lbl_addNpcVendor;
END IF;
IF healthNpc IS NULL OR healthNpc <= 0 THEN
SET healthNpc = ROUND((1 + RAND()) * 20000);
END IF;
IF levelNpc IS NULL OR levelNpc <= 0 THEN
SET levelNpc = 80;
END IF;
IF deleteNpc <> 0 AND deleteNpc <> 1 THEN
SET deleteNpc = 1;
END IF;

lbl_loop_additemvendor: LOOP
IF deleteNpc = 0 THEN
DELETE FROM `creature_template` WHERE `entry` = entryNpc + i;
END IF;
DELETE FROM `npc_vendor` WHERE `entry` = entryNpc + i;

IF (SELECT COUNT(`entry`) FROM `item_template` WHERE IF(typeSearch = 0, IF(type1Item <> -1, (`inventoryType` = type1Item),
(`entry` <> -1)), IF(typeSearch = 1, IF(type1Item <> -1, (`class` = type1Item), (`entry` <> -1)), (`entry` <> -1)))
AND IF(typeSearch = 0, IF(type2Item <> -1, (`ItemLevel` >= type2Item), (`entry` <> -1)), IF(typeSearch = 1, IF(type2Item <> -1,
(`subclass` = type2Item), (`entry` <> -1)), (`entry` <> -1))) AND IF(typeSearch = 2, `itemset` IN
(SELECT `entry` FROM `entry_sets`), (`entry` <> -1))AND `entry` NOT IN (SELECT `item` FROM `npc_vendor` WHERE
(`entry` >= entryNpc) AND (`entry` <= entryNpc + i))) = 0 THEN
LEAVE lbl_loop_additemvendor;
END IF;

IF deleteNpc = 0 THEN
INSERT INTO `creature_template` (`entry`, `modelid_A`, `modelid_H`, `name`, `subname`, `minlevel`, `maxlevel`, `minhealth`, `maxhealth`,
`faction_A`, `faction_H`, `npcflag`)
VALUES (entryNpc + i, displayId, displayId, nameNpc, subname, levelNpc, levelNpc, healthNpc, healthNpc, IF(factionNpc = 1, 1802,
IF(factionNpc = 2, 1801, 35)), IF(factionNpc = 1, 1802, IF(factionNpc = 2, 1801, 35)), npcflag);
END IF;
INSERT INTO `npc_vendor` (`entry`, `item`) SELECT entryNpc + i, `entry` FROM `item_template`
WHERE IF(typeSearch = 0, IF(type1Item <> -1, (`inventoryType` = type1Item), (`entry` <> -1)), IF(typeSearch = 1, IF(type1Item <> -1,
(`class` = type1Item), (`entry` <> -1)), (`entry` <> -1))) AND IF(typeSearch = 0, IF(type2Item <> -1, (`ItemLevel` >= type2Item),
(`entry` <> -1)), IF(typeSearch = 1, IF(type2Item <> -1, (`subclass` = type2Item), (`entry` <> -1)), (`entry` <> -1))) AND
IF(typeSearch = 2, `itemset` IN (SELECT `entry` FROM `entry_sets`), (`entry` <> -1)) AND `entry` NOT IN
(SELECT `item` FROM `npc_vendor` WHERE (`entry` >= entryNpc) AND (`entry` <= entryNpc + i)) LIMIT 0,150;

SET i := i + 1;
END LOOP lbl_loop_additemvendor;
IF deleteNpc = 0 THEN
SELECT i AS 'Vendeur(s) modifié(s)', (SELECT COUNT(`item`) FROM `npc_vendor` WHERE `entry` >= entryNpc AND `entry` <= entryNpc + i) AS 'Objet(s) ajouté(s)';
ELSE
SELECT i AS 'Vendeur(s) créé(s)', (SELECT COUNT(`item`) FROM `npc_vendor` WHERE `entry` >= entryNpc AND `entry` <= entryNpc + i) AS 'Objet(s) ajouté(s)';
END IF;
END lbl_addNpcVendor|

CALL addNpcVendor( @entry,
@displayId,
@healthNpc,
@levelNpc,
@nameNpc,
@subname,
@faction,
@flagNpc,
@typeSearch,
@typeSearchItem1,
@typeSearchItem2,
@deleteNpc)|

DROP PROCEDURE addNpcVendor|
DROP TABLE IF EXISTS `entry_sets`|
DELIMITER ;[/code]

Vous n'avez qu'a toucher à la partie configuration, le reste n'est pas utile.

Exemple de vendeurs :
Vendeur de montures a écrit :SET @typeSearch = 1|
SET @typeSearchItem1 = 15|
SET @typeSearchItem2 = 5|

Vendeur de chemises a écrit :SET @typeSearch = 0|
SET @typeSearchItem1 = 4|
SET @typeSearchItem2 = -1|

Vendeur de compagnons a écrit :SET @typeSearch = 1|
SET @typeSearchItem1 = 15|
SET @typeSearchItem2 = 2|

Vendeur de tabards a écrit :SET @typeSearch = 0|
SET @typeSearchItem1 = 19|
SET @typeSearchItem2 = -1|

Vendeur de gemmes rouges a écrit :SET @typeSearch = 1|
SET @typeSearchItem1 = 3|
SET @typeSearchItem2 = 0|

Vendeur de gemmes bleues a écrit :SET @typeSearch = 1|
SET @typeSearchItem1 = 3|
SET @typeSearchItem2 = 1|

Vendeur de gemmes jaunes a écrit :SET @typeSearch = 1|
SET @typeSearchItem1 = 3|
SET @typeSearchItem2 = 2|

Vendeur de gemmes métas a écrit :SET @typeSearch = 1|
SET @typeSearchItem1 = 3|
SET @typeSearchItem2 = 6|

Vendeur de projectiles a écrit :SET @typeSearch = 1|
SET @typeSearchItem1 = 6|
SET @typeSearchItem2 = -1|

Vendeur de clés a écrit :SET @typeSearch = 1|
SET @typeSearchItem1 = 13|
SET @typeSearchItem2 = -1|

Vendeur ensembles Donjon I a écrit :SET @typeSearch = 2|
INSERT INTO `entry_sets` (`entry`)
VALUES (188),(186),(184),(183),(185),(182),(187),(189),(181)
|

Et ce n'est qu'une petite partie de tous ce que vous pouvez créer.


Si vous avez des questions, des remarques ou des suggestions, n'HESITEZ PAS.
C'est comment dire.. Puissant. Je savais même pas ça possible et franchement c'est un gain de temps incroyable, un grand merci pour le partage !
Merci beaucoup Khira!
Très beau travail.
Voici une version allégée (comprenez par là avec moins d'options Hihi") avec plusieurs vendeurs de configurés :
  • Donjon
    • Donjon I
    • Donjon II
    • Donjon III
  • Raid
    • Raid I
    • Raid II
    • Raid III
    • Raid IV
    • Raid V
    • Raid VI
    • Raid VII
    • Raid VIII
    • Raid IX
    • Raid X
  • Recettes
    • Travaille du Cuir
    • Couture
    • Ingénieurie
    • Forge
    • Cuisine
    • Alchimie
    • Enchantement
    • Joaillerie
  • Gemmes
    • Rouges
    • Bleues
    • Jaunes
    • Violettes
    • Vertes
    • Oranges
    • Métas
    • Prismatiques
  • Autres
    • Sacs
    • Montures
    • Compagnons
    • Tabards
    • Projectiles
    • Clés
    • Glyphes

Vous avez juste à choisir l'ID de départ. Et comme vous pouvez le voir, en combinant correctement les champs de recherches, on obtient un grand nombre de vendeurs facilement.

Script : Vendeurs pré-configurés 1.0
Que dire a part merci et gg Smile
Tu touche a tout finalement Hihi
je savais même pas qu'on pouvait faire des truc comme ca en sqlTiou
GG sa roxx
Merci pour le patch

Retourner en haut Accueil