Aller au contenu

[C++] Abbility Potions


Messages recommandés

  • Bot

 

Niveau requis Débutant

Temps estimé : Entre 5 et 10 minutes

 

074414giphy.gif

Pré-requis:

- Source server & client

 

- Partie 1 / Source:

 

Server:

Révélation

 

 

1 - Nous allons ouvrir service.h et ajoutée

#define ENABLE_NEW_TYPE_OF_POTION // Ability potions.

2 - Nous allons ouvrir char_item.cpp et rechercher

						case ITEM_AUTO_HP_RECOVERY_S:
						case ITEM_AUTO_HP_RECOVERY_M:
						case ITEM_AUTO_HP_RECOVERY_L:

2.1 - Nous allons ajoutée ceci au dessus de ce code

#ifdef ENABLE_NEW_TYPE_OF_POTION
						case NEW_MOVE_SPEED_POTION:
						case NEW_ATTACK_SPEED_POTION:
						{
							EAffectTypes type = AFFECT_NONE;

							if (item->GetVnum() == NEW_MOVE_SPEED_POTION)
								type = AFFECT_MOV_SPEED;

							if (item->GetVnum() == NEW_ATTACK_SPEED_POTION)
								type = AFFECT_ATT_SPEED;

							if (AFFECT_NONE == type)
								break;

							CAffect * pAffect = FindAffect(type);

							if (NULL == pAffect)
							{
								EPointTypes bonus = POINT_NONE;
								EAffectBits flag = AFF_NONE;

								if (item->GetVnum() == NEW_MOVE_SPEED_POTION)
								{
									bonus = POINT_MOV_SPEED;
									flag = AFF_MOV_SPEED_POTION;
								}

								if (item->GetVnum() == NEW_ATTACK_SPEED_POTION)
								{
									bonus = POINT_ATT_SPEED;
									flag = AFF_ATT_SPEED_POTION;
								}

								AddAffect(type, bonus, item->GetValue(2), flag, INFINITE_AFFECT_DURATION, 0, true);

								item->Lock(true);
								item->SetSocket(0, true);
							}
							else
							{
								RemoveAffect(pAffect);
								item->Lock(false);
								item->SetSocket(0, false);
							}
						}
						break;
#endif

3 - Nous allons ouvrir unique_item.h et rechercher

ITEM_AUTO_SP_RECOVERY_X	=	72730,

3.1 - Ensuite nous ajoutons ceci en dessous:

#ifdef ENABLE_NEW_TYPE_OF_POTION
	NEW_MOVE_SPEED_POTION = 27122,
	NEW_ATTACK_SPEED_POTION = 27123,
#endif

4. Nous avons maintenant terminer côte server source, nous pouvons maintenant compiler le tout.

 

 

Client:

Révélation

 

1. Nous allons ouvrir Locale_inc.h et ajoutée

#define ENABLE_NEW_TYPE_OF_POTION // Ability potions.

2. Nous allons ouvrir PythonApplicationModule.cpp et rechercher

#ifdef ENABLE_COSTUME_SYSTEM
	PyModule_AddIntConstant(poModule, "ENABLE_COSTUME_SYSTEM",	1);
#else
	PyModule_AddIntConstant(poModule, "ENABLE_COSTUME_SYSTEM",	0);
#endif

2.1 Maintenant ajoutons ceci au dessus:

#ifdef ENABLE_NEW_TYPE_OF_POTION
	PyModule_AddIntConstant(poModule, "ENABLE_NEW_TYPE_OF_POTION", 1);
#else
	PyModule_AddIntConstant(poModule, "ENABLE_NEW_TYPE_OF_POTION", 0);
#endif

3. Nous avons maintenant terminer côte client source, nous pouvons maintenant compiler le tout.

 

 

- Partie 2 / Clientside / Root & Local:

Révélation

 

1. Nous allons ouvrir constinfo.py et ajoutée à la fin du fichier

if app.ENABLE_NEW_TYPE_OF_POTION:
	def IS_NEW_SPEED_POTION(itemVnum):
		return IS_NEW_MOVE_SPEED_POTION(itemVnum) or IS_NEW_ATT_SPEED_POTION(itemVnum)

	def IS_NEW_MOVE_SPEED_POTION(itemVnum):
		if itemVnum == 27122:
			return 1

		return 0

	def IS_NEW_ATT_SPEED_POTION(itemVnum):
		if itemVnum == 27123:
			return 1

		return 0

 

2. Nous allons ouvrir uiinventory.py et rechercher

			if constInfo.IS_AUTO_POTION(itemVnum):
				metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]	
				
				if slotNumber >= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex:
					slotNumber -= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex
					
				isActivated = 0 != metinSocket[0]
				
				if isActivated:
					self.wndItem.ActivateSlot(slotNumber)
					potionType = 0;
					if constInfo.IS_AUTO_POTION_HP(itemVnum):
						potionType = player.AUTO_POTION_TYPE_HP
					elif constInfo.IS_AUTO_POTION_SP(itemVnum):
						potionType = player.AUTO_POTION_TYPE_SP						
					
					usedAmount = int(metinSocket[1])
					totalAmount = int(metinSocket[2])					
					player.SetAutoPotionInfo(potionType, isActivated, (totalAmount - usedAmount), totalAmount, self.__InventoryLocalSlotPosToGlobalSlotPos(i))
				else:
					self.wndItem.DeactivateSlot(slotNumber)

2.1 Nous allons ajoutée en dessous cette fonction

			if app.ENABLE_NEW_TYPE_OF_POTION:
				if constInfo.IS_NEW_SPEED_POTION(itemVnum):
					metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(3)] ## player.METIN_SOCKET_MAX_NUM -> 3

					if slotNumber >= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex:
						slotNumber -= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex

					isActivated = 0 != metinSocket[0]

					if isActivated:
						self.wndItem.ActivateSlot(slotNumber)
					else:
						self.wndItem.DeactivateSlot(slotNumber)

3. Nous allons ouvrir uitooltip.py et rechercher

if item.USE_SPECIAL == itemSubType:

3.1 Nous allons ajoutée en dessous ceci:

				if app.ENABLE_NEW_TYPE_OF_POTION and constInfo.IS_NEW_SPEED_POTION(itemVnum):
					self.AppendSpace(5)
					self.AppendTextLine(localeInfo.ITEM_PERMANENT, self.POSITIVE_COLOR)

- Dossier Local:

1. Nous allons ouvrir locale_game.txt et ajoutée ceci:

ITEM_PERMANENT	(Permanent)

2. Nous allons ouvrir item_list.txt et ajoutée ceci:

27122	ETC	icon/item/27105.tga
27123	ETC	icon/item/27102.tga

3. Nous allons ouvrir item_desc.txt et ajoutée ceci:

27122	Potion violette (Permanent)	Augmente votre vitesse de déplacement de +10 pendant 10 minutes. Ne peut être vendue.
27123	Potion verte (Permanent)	Augmente votre vitesse d'attaque de +10 durant 10 minutes. Ne peut être vendue.

- Itemname & Itemproto:

27122	Potion violette (permanent)
27123	Potion verte (permanent)
27122	º¸¶ó»ö¹°¾à (´ë)	ITEM_USE	USE_SPECIAL	1	NONE	ANTI_DROP | ANTI_SELL | ANTI_STACK | ANTI_MYSHOP	ITEM_STACKABLE | LOG	NONE	1000	3000	0	0	0	LIMIT_NONE	0	LIMIT_NONE	0	APPLY_NONE	0	APPLY_NONE	0	APPLY_NONE	0	8	600	40	0	0	0	0	0	0
27123	³ì»ö¹°¾à (´ë)	ITEM_USE	USE_SPECIAL	1	NONE	ANTI_DROP | ANTI_SELL | ANTI_STACK | ANTI_MYSHOP	ITEM_STACKABLE | LOG	NONE	3000	3000	0	0	0	LIMIT_NONE	0	LIMIT_NONE	0	APPLY_NONE	0	APPLY_NONE	0	APPLY_NONE	0	7	600	30	0	0	0	0	0	0

Sinon il vous suffit de reproduire les lignes des potions violette & verte et de changer le tag: USE_ABILITY_UP par USE_SPECIAL

N'oubliez pas de dump & repack vos fichier et de transfèrer votre game & db.

 

 

Un soucis avec ce partage? Je vous invite à poster votre problèmes dans la section: Aide / Questions / Support

Source: turkmmo

 

Modifié par FBot
  • J'adore 7

090100logo.png 090149logo-4-bis.png

Lien à poster
  • 1 year later...

Bonjour  jai suivi ton tuto qui m'a lair tres bien explique mais le soucis c'est que une fois effectuer j'ai ce message d'erreur qui ce met 

Le 17/03/2016 à 20:16, Lars_ban a dit :

Merci pour ces "plusisieurs" couleur l'auteur

 

d'accord avec mon VDD :hap:

 

à l’instant, bizzard59 a dit :

Bonjour  jai suivi ton tuto qui m'a lair tres bien explique mais le soucis c'est que une fois effectuer j'ai ce message d'erreur qui ce met 

LOG 

systeme.py(line:273) runmainscript

systeme.py(line192) execfile

systeme.py(line163) Run

prototype.py(line3) <module>

...

...

...

 Run -<type 'exeptions.AttributeError'>: 'module' object has no attribute ' ENABLE_NEW_TYPE_OF_POTION

Lien à poster
  • 1 month later...

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant


×
×
  • Créer...

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.