Jump to content

C++ - Biologiste portable


Recommended Posts

F Download Center

           Télécharger ( Dernière Version )

Temps estimé : ~ 30 minutes

 

Bonjour,

 

Je vous présente un système codé par VegaS nommé "Professional Biolog". Il permet de donner les objets pour le biologiste via un interface situé a côtés de l'inventaire.

Il donne les récompense et indique quand vous pouvez redonner un objet (Le temps est réglable ainsi que les levels pour les missions, les récompense données).

 

spacer.png

 

Source : Just4metin.

 

Pré-requis

 

I. Partie I Modifications côtés sources.

Révélation

 

A. Source client :

Révélation

Dans le fichier "Locale_inc.h" ajouter a la fin :

 


/*********************************************************************
* title_name		: Professional Biolog System
* date_created		: 2016.08.07
* author			: VegaS
*/
#define ENABLE_BIOLOG_SYSTEM

Dans le fichier "PythonApplicationModule.cpp" cherchez :

 


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

Ajoutez en dessous :

 


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

Vous en avez fini pour les source du client.

 

B. Source serveur :

 

Révélation

Dans le dossier "common" :

 

service.h

Cherchez :

 


#define __UDP_BLOCK__

Ajouter en dessous :

 


#define ENABLE_BIOLOG_SYSTEM
#define ENABLE_WOLFMAN_CHARACTER // <=== Mettez cette ligne uniquement si vous avez le Lycan sur votre serveur.

 

 

 

On va attaquer la partie la "plus longue". Allez prendre un petit café et on est reparti !

 

Révélation

Dans le dossier "game" :

 

affect.h :

 

Cherchez :

 


AFFECT_DRAGON_SOUL_DECK_1 = 542,

Ajouter en dessous :

 


#ifdef ENABLE_BIOLOG_SYSTEM
	AFF_BIO_1 = 543,	AFF_BIO_2 = 544,	AFF_BIO_3 = 545,	AFF_BIO_4 = 546,
	AFF_BIO_5 = 547,	AFF_BIO_6 = 548,	AFF_BIO_7 = 549,	AFF_BIO_8 = 550,
	AFF_BIO_9 = 551,	AFF_BIO_10 = 552,	AFF_BIO_11 = 553,	AFF_BIO_12 = 554,
	AFF_BIO_13 = 555,	AFF_BIO_14 = 556,	AFF_BIO_15 = 557,	AFF_BIO_16 = 558,
	AFF_BIO_17 = 559,	AFF_BIO_18 = 560,	AFF_BIO_19 = 561,	AFF_BIO_20 = 562,
#endif

Ajouter a votre solution les fichiers "biolog.cpp" , "biolog.h" et "biologDefines.h"

 

char.cpp :

 

Cherchez :

 


bool CHARACTER::CanSummon(int iLeaderShip)
{
	return (iLeaderShip >= 20 || iLeaderShip >= 12 && m_dwLastDeadTime + 180 > get_dword_time());
}

 

Ajouter en dessous :

 


#ifdef ENABLE_BIOLOG_SYSTEM
int CHARACTER::GetBiologState(const std::string& state) const
{
	quest::CQuestManager& q = quest::CQuestManager::instance();
	quest::PC* pPC = q.GetPC(GetPlayerID());
	return pPC->GetFlag(state);
}

void CHARACTER::SetBiologState(const std::string& state, int szValue)
{
	quest::CQuestManager& q = quest::CQuestManager::instance();
	quest::PC* pPC = q.GetPC(GetPlayerID());
	pPC->SetFlag(state, szValue);
}
#endif

char.h :

 

Cherchez :

 


void				ClearQuestItemPtr();

Ajoutez en dessous :

 


#ifdef ENABLE_BIOLOG_SYSTEM
		int					GetBiologState(const std::string& state) const;
		void				SetBiologState(const std::string& state, int szValue);
#endif

 

 


cmd.cpp :

 

Cherchez :

 


ACMD(do_refine_pick);

 

Ajoutez en dessous :

 


#ifdef ENABLE_BIOLOG_SYSTEM
ACMD(do_biolog);
#endif

 

Cherchez :

 


{ "refine_pick",    do_refine_pick,        0,        POS_DEAD,    GM_IMPLEMENTOR    },

 

Ajoutez en dessous :

 


#ifdef ENABLE_BIOLOG_SYSTEM
    { "biolog",        do_biolog,        0,        POS_DEAD,        GM_PLAYER    },
#endif

 

cmd_general.cpp :

 

En dessous de " #include "item.h" " ajoutez :

 

 


#ifdef ENABLE_BIOLOG_SYSTEM
	#include "biolog.h"
#endif

 

Cherchez

 


ACMD(do_fishing)
{
	char arg1[256];
	one_argument(argument, arg1, sizeof(arg1));

	if (!*arg1)
		return;

	ch->SetRotation(atof(arg1));
	ch->fishing();
}

 

Ajoutez en dessous :

 


#ifdef ENABLE_BIOLOG_SYSTEM
ACMD(do_biolog)
{
	char arg1[256];
	one_argument(argument, arg1, sizeof(arg1));
	
	if (!*arg1)
	{
		BiologManager::instance().SendButton(ch);
		return;
	}	
	
	if (!strcmp(arg1, "92_reward_1")) {
		BiologManager::instance().SelectBonusType(ch, "92_reward_1"); return; }		
	if (!strcmp(arg1, "92_reward_2")) {
		BiologManager::instance().SelectBonusType(ch, "92_reward_2"); return; }				
	if (!strcmp(arg1, "92_reward_3")) {
		BiologManager::instance().SelectBonusType(ch, "92_reward_3"); return; }		
	if (!strcmp(arg1, "94_reward_1")) {
		BiologManager::instance().SelectBonusType(ch, "94_reward_1"); return; }			
	if (!strcmp(arg1, "94_reward_2")) {
		BiologManager::instance().SelectBonusType(ch, "94_reward_2"); return; }					
	if (!strcmp(arg1, "94_reward_3")) {
		BiologManager::instance().SelectBonusType(ch, "94_reward_3"); return; }			
}	
#endif

 

 

input_login.cpp :

 

Cherchez : 

 


#include "horsename_manager.h"

 

Ajoutez en dessous :

 


#ifdef ENABLE_BIOLOG_SYSTEM	
	#include "biolog.h"
#endif

 

Cherchez :

 


ch->SendGreetMessage();

 

Ajoutez en dessous :

 


#ifdef ENABLE_BIOLOG_SYSTEM	
	int pGetCompleted[] =
	{
		(ch->GetBiologState("biolog_lv92.completed")), (ch->GetBiologState("biolog_lv94.completed")), (ch->GetBiologState("biolog_lv92.used_window")), (ch->GetBiologState("biolog_lv94.used_window"))
	};
		
	if (pGetCompleted[1] != 1) {
		BiologManager::instance().SendUpdate_Binary(ch); }
	
	if (pGetCompleted[0] == 1 && pGetCompleted[2] < 1) {
		BiologManager::instance().SendWindow_SelectType(ch, 1); }
		
	if (pGetCompleted[1] == 1 && pGetCompleted[3] < 1) {
		BiologManager::instance().SendWindow_SelectType(ch, 2); }
#endif

 

 

main.cpp :

 

Cherchez :


#include "DragonSoul.h"

 

Ajoutez en dessous :

 

 


#ifdef ENABLE_BIOLOG_SYSTEM	
	#include "biolog.h"
#endif

 

Cherchez :

 


SECTREE_MANAGER	sectree_manager;

 

Ajoutez en dessous :

 


#ifdef ENABLE_BIOLOG_SYSTEM	
	BiologManager biolog;
#endif

 

 

 

utils.cpp :

 

 

Cherchez :

 


#include "stdafx.h"

 

 

Ajoutez en dessous :

 


#ifdef ENABLE_BIOLOG_SYSTEM
	#include "../../common/service.h"
#endif

 

 

Cherchez :

 


void set_global_time(time_t t)
{
	global_time_gap = t - time(0);

	char time_str_buf[32];
	snprintf(time_str_buf, sizeof(time_str_buf), "%s", time_str(get_global_time()));

	sys_log(0, "GLOBAL_TIME: %s time_gap %d", time_str_buf, global_time_gap);
}

 

 

 

Ajoutez en dessous :

 

 


#ifdef ENABLE_BIOLOG_SYSTEM
time_t init_biologTime()
{
	return time(0) + global_time_gap;
}
#endif

 

 

utils.h :

 

Cherchez :

 


#include <math.h>

 

Ajoutez en dessous :

 


#ifdef ENABLE_BIOLOG_SYSTEM
	#include "../../common/service.h"
#endif

Cherchez :

 


extern void set_global_time(time_t t);

 

 

Ajoutez en dessous :

 


#ifdef ENABLE_BIOLOG_SYSTEM
extern time_t init_biologTime();
#endif

 

 

Dans votre Make file cherchez : " CPPFILE = " et ajoutez a la suite des fichier .cpp "biolog.cpp" 

 

exemple: 

 

CPPFILE = A.cpp B.cpp\

                   C.cpp biolog.cpp

 

 

Vous pouvez désormais compiler le tout.

   

II. Modifications côtés clients.

Révélation

 

A. Serveur

Révélation

Vous devez juste implanter la quêtes " biolog_drops.lua "

 

B. Client

Révélation

Root / game.py :

 

Cherchez :

 


testAlignment = 0

Ajoutez en dessous :

 


# PROFESSIONAL_BIOLOG_SYSTEM
if app.ENABLE_BIOLOG_SYSTEM:
	import uiprofessionalbiolog
# END_OF_PROFESSIONAL_BIOLOG_SYSTEM

 

Cherchez :

 


"mall"			: self.__InGameShop_Show,

 

Ajouter en dessous :

 


			# PROFESSIONAL_BIOLOG_SYSTEM
			"BINARY_Biolog_Update"	:	self.BINARY_Biolog_Update,
			"BINARY_Biolog_SendMessage"	:	self.BINARY_Biolog_SendMessage,	
			"BINARY_Biolog_PopUp"	:	self.BINARY_Biolog_PopUp,
			"BINARY_Biolog_SelectReward"	:	self.BINARY_Biolog_SelectReward,
			# END_OF_PROFESSIONAL_BIOLOG_SYSTEM

 

 

Cherchez :

 


	def BINARY_BettingGuildWar_UpdateObserverCount(self, observerCount):
		self.interface.wndMiniMap.UpdateObserverCount(observerCount)

 

 

Ajoutez en dessous :

 


###################################################################
# title_name		: Professional Biolog System
# date_created		: 2016.08.07
# filename			: game.py
# author			: VegaS
# version_actual	: Version 0.0.8
#
	# PROFESSIONAL_BIOLOG_SYSTEM
	if app.ENABLE_BIOLOG_SYSTEM:
		def BINARY_Biolog_Update(self, pLeftTime, pCountActual, pCountNeed, pVnum):
			uiprofessionalbiolog.BIOLOG_BINARY_LOADED["time"][0] = int(pLeftTime) + app.GetGlobalTimeStamp()
			uiprofessionalbiolog.BIOLOG_BINARY_LOADED["countActual"][0] = str(pCountActual)	
			uiprofessionalbiolog.BIOLOG_BINARY_LOADED["countNeed"][0] = str(pCountNeed)
			uiprofessionalbiolog.BIOLOG_BINARY_LOADED["vnum"][0] = int(pVnum)

		def BINARY_Biolog_SendMessage(self, pMessage):
			if str(pMessage) != "":
				self.wndBiologMessage = uiCommon.PopupDialog()
				self.wndBiologMessage.SetWidth(350)
				self.wndBiologMessage.SetText((str(pMessage).replace("$"," ")))
				self.wndBiologMessage.Show()
			else:
				chat.AppendChat(chat.CHAT_TYPE_INFO, "Error, i could not initialize message from server!")

		def BINARY_Biolog_PopUp(self, iRewardType, iRewardItem, iBonusName_1, iBonusValue_1, iBonusName_2, iBonusValue_2):
			self.wndBiologSlider = uiprofessionalbiolog.Biolog_FinishSlider()
			self.wndBiologSlider.BINARY_BiologPopUp_Load([str(iRewardType), int(iRewardItem), str(iBonusName_1), int(iBonusValue_1), str(iBonusName_2), int(iBonusValue_2)])
			self.wndBiologSlider.Show()

		def BINARY_Biolog_SelectReward(self, iTypeWindow, iRewardType, iBonusName_1, iBonusValue_1, iBonusName_2, iBonusValue_2, iBonusName_3, iBonusValue_3):
			self.wndBiologSelectReward = uiprofessionalbiolog.Biolog_SelectReward()
			self.wndBiologSelectReward.Open_SelectRewardType([int(iTypeWindow), str(iRewardType), str(iBonusName_1), int(iBonusValue_1), str(iBonusName_2), int(iBonusValue_2), str(iBonusName_3), int(iBonusValue_3)])
			self.wndBiologSelectReward.SetTitle((str(iRewardType).replace("$"," ")))
			self.wndBiologSelectReward.SetCenterPosition()
			self.wndBiologSelectReward.SetTop()
			self.wndBiologSelectReward.Show()
	# END_OF_PROFESSIONAL_BIOLOG_SYSTEM

 

 

localeInfo.py :

 

Cherchez :

 


def SA(text):
	def f(x):
		return text % x
	return f

 

 

Ajoutez en dessous :

 


def FormatTime(time):
	m, s = divmod(time, 60)
	h, m = divmod(m, 60)
	return "%02d:%02d:%02d" % (h, m, s)	

 

uiInventory.py :

 

 

Cherchez :

 


import item

 

Ajoutez en dessous :

 

 


if app.ENABLE_BIOLOG_SYSTEM:
	import uiprofessionalbiolog, uiToolTip

 

Cherchez :

 


		if self.wndBelt:
			self.wndBelt.AdjustPositionAndSize()

 

 

Ajoutez en dessous  :

 


		if app.ENABLE_BIOLOG_SYSTEM:
			if self.wndCollect:
				self.wndCollect.AdjustPositionAndSize()

 

Cherchez :

 


		if self.wndCostume:
			self.isOpenedCostumeWindowWhenClosingInventory = self.wndCostume.IsShow()
			self.wndCostume.Close()

 

 

 

Ajoutez en dessous :

 

 


		if app.ENABLE_BIOLOG_SYSTEM:
			if self.wndCollect:
				self.isOpenedCollectWindowWhenClosingInventory = self.wndCollect.IsOpeningInventory()
				print "Is opening Biolog Inventory", self.isOpenedCollectWindowWhenClosingInventory
				self.wndCollect.Close()	

 

 

Cherchez :

 


		if self.wndBelt:
			self.wndBelt.Destroy()
			self.wndBelt = None

 

Ajoutez en dessous :

 


		if app.ENABLE_BIOLOG_SYSTEM:
			if self.wndCollect:
				self.wndCollect.Destroy()
				self.wndCollect = None

 

Cherchez :

 


			if app.ENABLE_NEW_EQUIPMENT_SYSTEM:
				self.wndBelt = BeltInventoryWindow(self)

 

 

 

Ajoutez en dessous :

 


			if app.ENABLE_BIOLOG_SYSTEM:
				self.wndCollect = None
				self.wndCollect = CollectInventoryWindow(self)

 

 

 

Cherchez :

 


		if self.isOpenedCostumeWindowWhenClosingInventory and self.wndCostume:
			self.wndCostume.Show() 

 

 

Ajoutez en dessous :

 


		if app.ENABLE_BIOLOG_SYSTEM:
			if self.wndCollect:
				self.wndCollect.Show(self.isOpenedCollectWindowWhenClosingInventory)

 

 

 

Cherchez :

 


	questionDialog = None
	tooltipItem = None
	wndCostume = None
	wndBelt = None

 

Ajoutez en dessous :

 

 


	if app.ENABLE_BIOLOG_SYSTEM:
		wndCollect = None

 

 

Cherchez :

 


isOpenedCostumeWindowWhenClosingInventory = 0

 

Ajoutez en dessous :

 

 


	if app.ENABLE_BIOLOG_SYSTEM:
		isOpenedCollectWindowWhenClosingInventory = 0

 

Cherchez :

 


	def GetBasePosition(self):
		x, y = self.wndInventory.GetGlobalPosition()
		return x - 148, y + 241

 

 

 

Modifiez la comme ceci :

 

 


	if app.ENABLE_BIOLOG_SYSTEM:
		def GetBasePosition(self):
			x, y = self.wndInventory.GetGlobalPosition()
			return x - 148, y + 385
	else:
		def GetBasePosition(self):
			x, y = self.wndInventory.GetGlobalPosition()
			return x - 148, y + 241	

 

 

Cherchez :

 

 


	def RefreshSlot(self):
		getItemVNum=player.GetItemIndex
		
		for i in xrange(item.BELT_INVENTORY_SLOT_COUNT):
			slotNumber = item.BELT_INVENTORY_SLOT_START + i
			self.wndBeltInventorySlot.SetItemSlot(slotNumber, getItemVNum(slotNumber), player.GetItemCount(slotNumber))
			self.wndBeltInventorySlot.SetAlwaysRenderCoverButton(slotNumber, TRUE)
			
			avail = "0"
			
			if player.IsAvailableBeltInventoryCell(slotNumber):
				self.wndBeltInventorySlot.EnableCoverButton(slotNumber)	
			else:
				self.wndBeltInventorySlot.DisableCoverButton(slotNumber)

		self.wndBeltInventorySlot.RefreshSlot()	

 

 

Ajoutez en dessous :

 


if app.ENABLE_BIOLOG_SYSTEM:
###################################################################
# title_name		: Professional Biolog System
# date_created		: 2016.08.07
# filename			: uiInventory.py
# author			: VegaS
# version_actual	: Version 0.0.8
#
	class CollectInventoryWindow(ui.ScriptWindow):
		def __init__(self, wndInventory):
			import exception
			if not wndInventory:
				exception.Abort("wndInventory parameter must be set to CollectInventoryWindow")
				return
			ui.ScriptWindow.__init__(self)
			self.isLoaded = 0
			self.updated = 0
			self.wndInventory = wndInventory;
			self.tooltipItem = uiToolTip.ItemToolTip()
			self.tooltipItem.Hide()
			self.wndBeltInventoryLayer = None
			self.wndBeltInventorySlot = None
			self.expandBtn = None
			self.minBtn = None
			self.gameWindow = None
			self.__LoadWindow()

		def __del__(self):
			ui.ScriptWindow.__del__(self)

		def Show(self, openBeltSlot = False):
			self.__LoadWindow()
			ui.ScriptWindow.Show(self)

			if openBeltSlot:
				self.OpenInventory()
			else:
				self.CloseInventory()

		def Close(self):
			self.Hide()

		def IsOpeningInventory(self):
			return self.wndBeltInventoryLayer.IsShow()

		def OpenInventory(self):
			self.wndBeltInventoryLayer.Show()
			self.expandBtn.Hide()

			self.AdjustPositionAndSize()

		def CloseInventory(self):
			self.wndBeltInventoryLayer.Hide()
			self.expandBtn.Show()

			self.AdjustPositionAndSize()

		def GetBasePosition(self):
			x, y = self.wndInventory.GetGlobalPosition()
			return x - 148, y + 260
			
		def AdjustPositionAndSize(self):
			bx, by = self.GetBasePosition()

			if self.IsOpeningInventory():
				self.SetPosition(bx, by)
				self.SetSize(self.ORIGINAL_WIDTH, self.GetHeight())
			else:
				self.SetPosition(bx + 138, by);
				self.SetSize(10, self.GetHeight())

		def __LoadWindow(self):
			if self.isLoaded == 1:
				return

			self.isLoaded = 1

			try:
				pyScrLoader = ui.PythonScriptLoader()
				pyScrLoader.LoadScriptFile(self, "UIScript/biolog_collectinventorywindow.py")
			except:
				import exception
				exception.Abort("CollectInventoryWindow.LoadWindow.LoadObject")

			try:
				self.ORIGINAL_WIDTH = self.GetWidth()
				self.wndBeltInventoryLayer = self.GetChild("BeltInventoryLayer")
				self.wndItem = self.GetChild("BeltInventorySlot")
				self.time_value = self.GetChild("time_value")
				self.biolog_count = self.GetChild("count_value")
				self.expandBtn = self.GetChild("ExpandBtn")
				self.minBtn = self.GetChild("MinimizeBtn")
				self.sendBtn = self.GetChild("send_biolog")
				self.expandBtn.SetEvent(ui.__mem_func__(self.OpenInventory))
				self.minBtn.SetEvent(ui.__mem_func__(self.CloseInventory))
				self.wndItem.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
				self.wndItem.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
			except:
				import exception
				exception.Abort("CollectInventoryWindow.LoadWindow.BindObject")

			if self.sendBtn:
				self.sendBtn.SetEvent(ui.__mem_func__(self.AcceptBiolog))

		def SetItem(self, arg1, arg2, arg3):
			self.wndItem.SetItemSlot(0, int(uiprofessionalbiolog.BIOLOG_BINARY_LOADED["vnum"][0]), 0)
			
		def AcceptBiolog(self):
			net.SendChatPacket("/biolog")

		def SetTime(self, time):
			time_collect = time - app.GetGlobalTimeStamp()

			if time_collect < 0:
				time_collect = 0 

			if time_collect == 1:
				self.wndLeftTime = uiprofessionalbiolog.Biolog_TimeExpired()
				self.wndLeftTime.OpenWindow()
				self.wndLeftTime.Show()

			self.time_value.SetText(localeInfo.FormatTime(time_collect))

		def OnUpdate(self):
			self.SetTime(int(uiprofessionalbiolog.BIOLOG_BINARY_LOADED["time"][0]))
			self.SetItem(0, uiprofessionalbiolog.BIOLOG_BINARY_LOADED["vnum"][0], 0)
			self.biolog_count.SetText(uiprofessionalbiolog.BIOLOG_BINARY_LOADED['countActual'][0] + "/" + uiprofessionalbiolog.BIOLOG_BINARY_LOADED['countNeed'][0])

		def OverInItem(self):
			if uiprofessionalbiolog.BIOLOG_BINARY_LOADED["vnum"][0]:
				self.tooltipItem.SetItemToolTip(uiprofessionalbiolog.BIOLOG_BINARY_LOADED["vnum"][0])

		def OverOutItem(self):
			if self.tooltipItem:
				self.tooltipItem.HideToolTip()	

 

 

Enfin ajoutez le fichier "uiprofessionalbiolog.py" a la racine .

 

 

Dans le dossier " uiscript ", mettez les 4 fichiers biolog_*.py.

 

Dans le dossier "ymir work/ui/game", mettez le dossier "biolog_system_vegas"

 

 

Vous avez fini !

 

 

III. Configuration

Révélation

 

A. Configuration

Révélation

Les configuration majeur tel que le temps, les récompenses données, les level et du texte a traduire. Et dans uiprofessionalbiolog.py côtés root.

 

 

Pour continuer

 

  • Like 7
Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.