Aller au contenu
Top-Metin2.org - Vous êtes à la recherche d'un serveur Metin 2 ? ×
×
×
  • Créer...

C++ - Commande : Do Item Purge


Messages recommandés

  • Développeur

Centre de Téléchargement

Hidden Content

    Give reaction to this post to see the hidden content.
( Interne )

Salut à tous !

 

Vous en avez marre de perdre tout votre stuff quand vous voulez supprimer juste votre inventaire, ou alors vous souhaitez supprimer une fenêtre d'équipement/inventaire précise ?

Pas de panique, je suis là pour vous aider!

 

Voici la commande à remplacer dans "cmd_gm.cpp":

ACMD(do_item_purge)
{
	char arg1[256], arg2[256];
	two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
	
	if (!*arg1)
	{
		ch->ChatPacket(CHAT_TYPE_INFO, "Usage: /ipurge (a)ll | (b)elt | (c)ostume | (d)ragonsoul [(e)quip | (i)nventory] | (e)quipment | (i)nventory");
		return;
	}
#ifdef NEW_PET_SYSTEM
	if (ch->GetNewPetSystem()->IsActivePet())
	{
		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("pet_cant_cleanup_while_pet_active"));
		return ;
	}
#endif 
	int         i;
	LPITEM      item;

	arg1[0] = tolower(arg1[0]);
	arg2[0] = tolower(arg2[0]);
	
	if (*arg1 == 'b' || *arg1 == 'a')
	{
		for (i = BELT_INVENTORY_SLOT_START; i < BELT_INVENTORY_SLOT_END; ++i)
		{
			if ((item = ch->GetInventoryItem(i)))
			{
				ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
				ch->SyncQuickslot(QUICKSLOT_TYPE_ITEM, i, 255);
			}
		}
	}
	if (*arg1 == 'c' || *arg1 == 'a')
	{
		for (i = INVENTORY_MAX_NUM; i < INVENTORY_AND_EQUIP_SLOT_MAX; ++i)
		{
			if ((item = ch->GetInventoryItem(i)) && item->GetType() == ITEM_COSTUME)
			{
				ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
				ch->SyncQuickslot(QUICKSLOT_TYPE_ITEM, i, 255);
			}
		}
		ch->SetPart(PART_HAIR, 0);
		ch->SetPart(PART_MAIN, ch->GetWear(WEAR_BODY)->GetVnum());
		ch->SetPart(PART_WEAPON, ch->GetWear(WEAR_WEAPON)->GetVnum());
		ch->SetPart(PART_ACCE, 0);
		ch->UpdatePacket();
	}
	if (*arg1 == 'd' || *arg1 == 'a')
	{
		if (*arg2 == 'e' || !*arg2)
		{
			for (i = DRAGON_SOUL_EQUIP_SLOT_START; i < DRAGON_SOUL_EQUIP_SLOT_END; ++i)
			{
				if ((item = ch->GetInventoryItem(i)))
					ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
			}
		}
		if (*arg2 == 'i' || !*arg2)
		{
			for (i = 0; i < DRAGON_SOUL_INVENTORY_MAX_NUM; ++i)
			{
				if ((item = ch->GetItem(TItemPos(DRAGON_SOUL_INVENTORY, i ))))
					ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
			}
		}
	}
	if (*arg1 == 'e' || *arg1 == 'a')
	{
		for (i = INVENTORY_MAX_NUM; i < INVENTORY_AND_EQUIP_SLOT_MAX; ++i)
		{
			if ((item = ch->GetInventoryItem(i)))
			{
				ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
				ch->SyncQuickslot(QUICKSLOT_TYPE_ITEM, i, 255);
			}
		}
	}
	if (*arg1 == 'i' || *arg1 == 'a')
	{
		for (i = 0; i < INVENTORY_MAX_NUM; ++i)
		{
			if ((item = ch->GetInventoryItem(i)))
			{
				ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
				ch->SyncQuickslot(QUICKSLOT_TYPE_ITEM, i, 255);
			}
		}
	}
}

 

Utilisation:

/ip(urge) <window> <sub window>

 

Exemples:

/ip belt

/ip b

-> Supprime votre inventaire ceinture

 

/ip costume

/ip c

-> Supprime vos costumes uniquement

 

/ip dragonsoul

/ip d

-> Supprime l'inventaire et les decks DragonSoul

 

/ip dragonsoul equipement

/ip d e

-> Supprime les decks Dragon Soul

 

/ip dragonsoul inventory

/ip d i

-> Supprime l'inventaire Dragon Soul

 

/ip equipement

/ip e

-> Supprime tout l'équipement (costume compris)

 

/ip inventory

/ip i

-> Supprime votre inventaire

 

/ip all

/ip a

-> Supprime tous les inventaires et équipements (inventaire, équipement, ceinture, inventaire DS, decks DS, costumes)

 

La bise!

 

 

  • Metin2 Dev 2
  • Love 2
Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 6
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

  • Développeur

Hey ! Très bonne commande !

 

Le fait de l'avoir déjà fait me permet en plus de comparer avec ton code. J'utilisais une méthode différente pour la boucle for, mais qui revenait exactement au même, pareil pour les arguments !

 

De mon côté je faisais appel au string::compare mais ça ne me permettait pas de faire un shortcut propre, dans le sens ou je devais écrire la commande en entier ou mettre une condition pour la première lettre. En plus de faire une déclaration de plus.

 

std::string StringedArg(arg1);

if (!StringedArg.compare(0, 4, "belt")) || !StringedArg.compare(0, 1, "b"))
{
  //...
}

+1 bien mérité !

Lien vers le commentaire
Partager sur d’autres sites



  • brilliantdiscord_widget
  • Flux d'Activité

    1. 0

      OldEraMT2 | Classique 2009 Oldschool | Niveau 99 | 7 langues | Sans pay2win | Bêta fermée

    2. 6

      problème de connexion à mon serveur local (je suis débutant dans ce genre d'entreprise )

    3. 2

      problème de lancement serveur

    4. 9
    5. 0

      [PVM/PVP] ATLAX2 - EASY PLAY

    6. 2

      problème de lancement serveur

Information importante

Conditions d’utilisation / Politique de confidentialité / Règles / Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.