Vous devez être connecté et donner une réaction ( Like ) au sujet pour débloquer les liens de téléchargements...
Takuma

 tutoriel Les Modules CPython

Recommended Posts

Niveau requis Intermédiaire

Temps estimé : 30 minutes

Bonjour.

 

Dans ce tutoriel je vais essayer de vous éclairer sur les modules créer par CPython sur Metin2.
 
Introduction
 
Révélation

 

Vous avez, si vous avez déjà touché à votre client surement vu au début (ou pas d'ailleurs) des fichiers python, des lignes comme :
import app
Ici, nous importons le module App. Sur metin2, vous pourrez retrouver également :
  • os
  • app
  • etc...

 

 

 

Révélation

 

Il existe plusieurs module comme ceux-ci. Dans ce tutoriel je vais vous expliquer où sont générés ces modules, et vous fournir des explications sur ceux-ci. Étude de cas : app, bien, si vous disposez des sources clients, ouvrez PythonApplicationModule.cpp : Vous pourrez trouver cette ligne :
PyObject * poModule = Py_InitModule("app", s_methods);
Ici, nous déclarons un module nommé app qui va contenir une liste de fonction. Si nous regardons en haut de ce code, nous pouvons voir :
static PyMethodDef s_methods[] =
Révélation

 


static PyMethodDef s_methods[] =
{
{ "IsDevStage", appIsDevStage, METH_VARARGS },
{ "IsTestStage", appIsTestStage, METH_VARARGS },
{ "IsLiveStage", appIsLiveStage, METH_VARARGS },

// TEXTTAIL_LIVINGTIME_CONTROL
{ "SetTextTailLivingTime", appSetTextTailLivingTime, METH_VARARGS },
// END_OF_TEXTTAIL_LIVINGTIME_CONTROL

{ "EnablePerformanceTime", appEnablePerformanceTime, METH_VARARGS },
{ "SetHairColorEnable", appSetHairColorEnable, METH_VARARGS },

{ "SetArmorSpecularEnable", appSetArmorSpecularEnable, METH_VARARGS },
{ "SetWeaponSpecularEnable", appSetWeaponSpecularEnable, METH_VARARGS },
{ "SetSkillEffectUpgradeEnable",appSetSkillEffectUpgradeEnable, METH_VARARGS },
{ "SetTwoHandedWeaponAttSpeedDecreaseValue", SetTwoHandedWeaponAttSpeedDecreaseValue, METH_VARARGS },
{ "SetRideHorseEnable", appSetRideHorseEnable, METH_VARARGS },

{ "SetCameraMaxDistance", appSetCameraMaxDistance, METH_VARARGS },
{ "SetMinFog", appSetMinFog, METH_VARARGS },
{ "SetFrameSkip", appSetFrameSkip, METH_VARARGS },
{ "GetImageInfo", appGetImageInfo, METH_VARARGS },
{ "GetInfo", appGetInfo, METH_VARARGS },
{ "UpdateGame", appUpdateGame, METH_VARARGS },
{ "RenderGame", appRenderGame, METH_VARARGS },
{ "Loop", appLoop, METH_VARARGS },
{ "Create", appCreate, METH_VARARGS },
{ "Process", appProcess, METH_VARARGS },
{ "Exit", appExit, METH_VARARGS },
{ "Abort", appAbort, METH_VARARGS },
{ "SetMouseHandler", appSetMouseHandler, METH_VARARGS },
{ "IsExistFile", appIsExistFile, METH_VARARGS },
{ "GetFileList", appGetFileList, METH_VARARGS },

{ "SetCamera", appSetCamera, METH_VARARGS },
{ "GetCamera", appGetCamera, METH_VARARGS },
{ "GetCameraPitch", appGetCameraPitch, METH_VARARGS },
{ "GetCameraRotation", appGetCameraRotation, METH_VARARGS },
{ "GetTime", appGetTime, METH_VARARGS },
{ "GetGlobalTime", appGetGlobalTime, METH_VARARGS },
{ "GetGlobalTimeStamp", appGetGlobalTimeStamp, METH_VARARGS },
{ "GetUpdateFPS", appGetUpdateFPS, METH_VARARGS },
{ "GetRenderFPS", appGetRenderFPS, METH_VARARGS },
{ "RotateCamera", appRotateCamera, METH_VARARGS },
{ "PitchCamera", appPitchCamera, METH_VARARGS },
{ "ZoomCamera", appZoomCamera, METH_VARARGS },
{ "MovieRotateCamera", appMovieRotateCamera, METH_VARARGS },
{ "MoviePitchCamera", appMoviePitchCamera, METH_VARARGS },
{ "MovieZoomCamera", appMovieZoomCamera, METH_VARARGS },
{ "MovieResetCamera", appMovieResetCamera, METH_VARARGS },

{ "GetAvailableTextureMemory", appGetAvaiableTextureMememory, METH_VARARGS },
{ "GetRenderTime", appGetRenderTime, METH_VARARGS },
{ "GetUpdateTime", appGetUpdateTime, METH_VARARGS },
{ "GetLoad", appGetLoad, METH_VARARGS },
{ "GetFaceSpeed", appGetFaceSpeed, METH_VARARGS },
{ "GetFaceCount", appGetFaceCount, METH_VARARGS },
{ "SetFPS", appSetFPS, METH_VARARGS },
{ "SetGlobalCenterPosition", appSetGlobalCenterPosition, METH_VARARGS },
{ "SetCenterPosition", appSetCenterPosition, METH_VARARGS },
{ "GetCursorPosition", appGetCursorPosition, METH_VARARGS },

{ "GetRandom", appGetRandom, METH_VARARGS },
{ "RunPythonFile", appRunPythonFile, METH_VARARGS },
{ "IsWebPageMode", appIsWebPageMode, METH_VARARGS },
{ "ShowWebPage", appShowWebPage, METH_VARARGS },
{ "MoveWebPage", appMoveWebPage, METH_VARARGS },
{ "HideWebPage", appHideWebPage, METH_VARARGS },
{ "IsPressed", appIsPressed, METH_VARARGS },
{ "SetCursor", appSetCursor, METH_VARARGS },
{ "GetCursor", appGetCursor, METH_VARARGS },
{ "ShowCursor", appShowCursor, METH_VARARGS },
{ "HideCursor", appHideCursor, METH_VARARGS },
{ "IsShowCursor", appIsShowCursor, METH_VARARGS },
{ "IsLiarCursorOn", appIsLiarCursorOn, METH_VARARGS },
{ "SetSoftwareCursor", appSetSoftwareCursor, METH_VARARGS },
{ "SetHardwareCursor", appSetHardwareCursor, METH_VARARGS },

{ "SetConnectData", appSetConnectData, METH_VARARGS },
{ "GetConnectData", appGetConnectData, METH_VARARGS },

{ "GetRotatingDirection", appGetRotatingDirection, METH_VARARGS },
{ "GetDegreeDifference", appGetDegreeDifference, METH_VARARGS },
{ "Sleep", appSleep, METH_VARARGS },
{ "SetDefaultFontName", appSetDefaultFontName, METH_VARARGS },
{ "SetGuildSymbolPath", appSetGuildSymbolPath, METH_VARARGS },

{ "EnableSpecialCameraMode", appEnableSpecialCameraMode, METH_VARARGS },
{ "SetCameraSpeed", appSetCameraSpeed, METH_VARARGS },

{ "SaveCameraSetting", appSaveCameraSetting, METH_VARARGS },
{ "LoadCameraSetting", appLoadCameraSetting, METH_VARARGS },
{ "SetDefaultCamera", appSetDefaultCamera, METH_VARARGS },
{ "SetCameraSetting", appSetCameraSetting, METH_VARARGS },

{ "SetSightRange", appSetSightRange, METH_VARARGS },

{ "IsFileExist", appIsFileExist, METH_VARARGS },
{ "OpenTextFile", appOpenTextFile, METH_VARARGS },
{ "CloseTextFile", appCloseTextFile, METH_VARARGS },
{ "GetTextFileLineCount", appGetTextFileLineCount, METH_VARARGS },
{ "GetTextFileLine", appGetTextFileLine, METH_VARARGS },

// LOCALE
{ "GetLocaleServiceName", appGetLocaleServiceName, METH_VARARGS },
{ "GetLocaleName", appGetLocaleName, METH_VARARGS },
{ "GetLocalePath", appGetLocalePath, METH_VARARGS },
{ "ForceSetLocale", appForceSetLocale, METH_VARARGS },
// END_OF_LOCALE

// CHEONMA
{ "LoadLocaleAddr", appLoadLocaleAddr, METH_VARARGS },
{ "LoadLocaleData", appLoadLocaleData, METH_VARARGS },
{ "SetCHEONMA", appSetCHEONMA, METH_VARARGS },
{ "IsCHEONMA", appIsCHEONMA, METH_VARARGS },
// END_OF_CHEONMA

{ "GetDefaultCodePage", appGetDefaultCodePage, METH_VARARGS },
{ "SetControlFP", appSetControlFP, METH_VARARGS },
{ "SetSpecularSpeed", appSetSpecularSpeed, METH_VARARGS },

{ "testGetAccumulationTime", apptestGetAccumulationTime, METH_VARARGS },
{ "testResetAccumulationTime", apptestResetAccumulationTime, METH_VARARGS },
{ "testSetSpecularColor", apptestSetSpecularColor, METH_VARARGS },

{ "SetVisibleNotice", appSetVisibleNotice, METH_VARARGS },
{ "IsVisibleNotice", appIsVisibleNotice, METH_VARARGS },
{ "EnableTestServerFlag", appEnableTestServerFlag, METH_VARARGS },
{ "IsEnableTestServerFlag", appIsEnableTestServerFlag, METH_VARARGS },

{ "SetGuildMarkPath", appSetGuildMarkPath, METH_VARARGS },

{ "OnLogoUpdate", appLogoUpdate, METH_VARARGS },
{ "OnLogoRender", appLogoRender, METH_VARARGS },
{ "OnLogoOpen", appLogoOpen, METH_VARARGS },
{ "OnLogoClose", appLogoClose, METH_VARARGS },


{ NULL, NULL },
};

PyObject * poModule = Py_InitModule("app", s_methods);

 

 

 

 


Bien, nous voyons donc pleins de ligne comme celle-ci :
{ "IsDevStage", appIsDevStage, METH_VARARGS },
Ici, nous pouvons retrouver :
"IsDevStage", 
C'est avec ce nom que l'ont va pouvoir appeler par Python notre fonction C++ qui est :
appIsDevStage
Regardons par exemple cette fonction qui est (pour ceux qui n'ont pas le fichier) :
PyObject* appIsDevStage(PyObject* poSelf, PyObject* poArgs)
{
int nIsDevelopmentStage = 0;
#if defined(LOCALE_SERVICE_STAGE_DEVELOPMENT)
nIsDevelopmentStage = 1;
#endif
return Py_BuildValue("i", nIsDevelopmentStage);
}
 
Par exemple, cette fonction :
 
  • Définie une variable nommée "nIsDevelopmentStage" à la quelle on attribue la valeur 0,
  • On vérifie si on trouve dans le code un "#define LOCALE_SERVICE_STAGE_DEVELOPMENT 1",
  • Si le trouve, on assigne notre variable précédemment créé sur 1,
  • On renvoie ensuite la valeur de notre variable à Python.
 
On peut donc facilement rajouter une méthode à notre module par exemple :
{ "TAKUMA_FONCTION", appTakuma, METH_VARARGS },
Avec ceci, vous pourrez appeler :
app.TAKUMA_FONCTION
Qui utilisera la fonction CPP :
appTakuma
Et voilà comment son générés les modules CPython.

 

 

Cordialement,

Takuma

Share this post


Link to post
Share on other sites