Aller au contenu
  • 0

Dragon_soul


Eristoff

Question

Bonjour,

 

Version des fichiers/ Type d'émulateur : Files 2016

Domaine (Base de données, Client, Core...) : Client

Votre niveau (Débutant, Intermédiaire, Avancé..) : Début

 

Description du problème : Quand j'équipe les légendaires, j'ai une diamant dragon légendaire qui s'affiche dans l'inventaire

Comment reproduire le problème ? :

Recherches et tests effectués : Google, forum...

 

Screenshot du problème concerné

1547914860-aide.png

 

Merci d'avance à tous

 

En postant ma demande d'aide, j'affirme avoir lu et accepté le Règlement de Funky-Emulation.

Modifié par Eristoff

En vous remerciant,

Cordialement, Eristoff

Lien à poster

22 réponses à cette question

Messages recommandés

  • 0
Bonjour et merci d'avoir répondu,
rien du tout, j'ai seulement pris des files étrangères
 
voici mon GameType.h :
 
Merci d’avance
	
	#pragma once
	#include "../GameLib/ItemData.h"
	#include "Locale_inc.h"

struct SAffects
	{
	    enum
	    {
	        AFFECT_MAX_NUM = 32,
	    };

    SAffects() : dwAffects(0) {}
	    SAffects(const DWORD & c_rAffects)
	    {
	        __SetAffects(c_rAffects);
	    }
	    int operator = (const DWORD & c_rAffects)
	    {
	        __SetAffects(c_rAffects);
	    }

    BOOL IsAffect(BYTE byIndex)
	    {
	        return dwAffects & (1 << byIndex);
	    }

    void __SetAffects(const DWORD & c_rAffects)
	    {
	        dwAffects = c_rAffects;
	    }

    DWORD dwAffects;
	};

extern std::string g_strGuildSymbolPathName;

const DWORD c_Name_Max_Length = 64;
	const DWORD c_FileName_Max_Length = 128;
	const DWORD c_Short_Name_Max_Length = 32;

const DWORD c_Inventory_Page_Size = 5*9; // x*y
	const DWORD c_Inventory_Page_Count = 4;
	const DWORD c_ItemSlot_Count = c_Inventory_Page_Size * c_Inventory_Page_Count;
	const DWORD c_Equipment_Count = 12;

const DWORD c_Equipment_Start = c_ItemSlot_Count;

const DWORD c_Equipment_Body    = c_Equipment_Start + 0;
	const DWORD c_Equipment_Head    = c_Equipment_Start + 1;
	const DWORD c_Equipment_Shoes    = c_Equipment_Start + 2;
	const DWORD c_Equipment_Wrist    = c_Equipment_Start + 3;
	const DWORD c_Equipment_Weapon    = c_Equipment_Start + 4;
	const DWORD c_Equipment_Neck    = c_Equipment_Start + 5;
	const DWORD c_Equipment_Ear        = c_Equipment_Start + 6;
	const DWORD c_Equipment_Unique1    = c_Equipment_Start + 7;
	const DWORD c_Equipment_Unique2    = c_Equipment_Start + 8;
	const DWORD c_Equipment_Arrow    = c_Equipment_Start + 9;
	const DWORD c_Equipment_Shield    = c_Equipment_Start + 10;

// 새로 추가된 신규 반지 & 벨트
	// 장착형 아이템에 할당할 수 있는 위치가 기존 장비, 채기랍 퀘스트 보상, 코스튬 시스템 등으로 인해서 공간이 잘려있다.
	// 이게 다 채기랍 보상 버프를 장착아이템처럼 구현한 ㅅㄲ 때문에 난리났따... ㅆㅂ
	// 
	// 정리하면, 기존 장비창들은 서버DB상 아이템 포지션이 90 ~ 102 이고,
	// 2013년 초에 새로 추가되는 슬롯들은 111 ~ 부터 시작한다. 착용 장비에서 최대로 사용할 수 있는 값은 121 까지이고, 122부터는 용혼석에서 사용한다.

#ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
	    const DWORD c_New_Equipment_Start = c_Equipment_Start + 30;
	    const DWORD c_New_Equipment_Count = 3;
	    const DWORD c_Equipment_Ring1    = c_New_Equipment_Start + 0;
	    const DWORD c_Equipment_Ring2    = c_New_Equipment_Start + 1;
	    const DWORD c_Equipment_Belt    = c_New_Equipment_Start + 2;;
	#endif

#ifdef ENABLE_COSTUME_SYSTEM
	    const DWORD c_Costume_Slot_Start    = c_Equipment_Start + 19;    // [주의] 숫자(19) 하드코딩 주의. 현재 서버에서 코스츔 슬롯은 19부터임. 서버 common/length.h 파일의 EWearPositions 열거형 참고.
	    const DWORD    c_Costume_Slot_Body        = c_Costume_Slot_Start + 0;
	    const DWORD    c_Costume_Slot_Hair        = c_Costume_Slot_Start + 1;
	    const DWORD c_Costume_Slot_Weapon     = c_Costume_Slot_Start + 2;
	#ifdef ENABLE_ACCE_SYSTEM
	    const DWORD    c_Costume_Slot_Acce        = c_Costume_Slot_Start + 3;
	#endif
	    const DWORD    c_Costume_Slot_Mount    = c_Costume_Slot_Start + 4;

#ifdef ENABLE_SPECIAL_SHINING_SYSTEM
	    const DWORD c_Costume_Slot_Weapon01 = c_Costume_Slot_Start + 5;
	    const DWORD c_Costume_Slot_Weapon02 = c_Costume_Slot_Start + 6;
	    const DWORD c_Costume_Slot_Weapon03 = c_Costume_Slot_Start + 7;

    const DWORD c_Costume_Slot_Armor01 = c_Costume_Slot_Start + 8;
	    const DWORD c_Costume_Slot_Armor02 = c_Costume_Slot_Start + 9;
	    const DWORD c_Costume_Slot_Armor03 = c_Costume_Slot_Start + 10;
	#endif
	    const DWORD c_Costume_Slot_Count = 11;
	    const DWORD c_Costume_Slot_End = c_Costume_Slot_Start + c_Costume_Slot_Count;
	#endif

enum EDragonSoulDeckType
	{
	    DS_DECK_1,
	    DS_DECK_2,
	    DS_DECK_MAX_NUM = 2,
	};

enum EDragonSoulGradeTypes
	{
	    DRAGON_SOUL_GRADE_NORMAL,
	    DRAGON_SOUL_GRADE_BRILLIANT,
	    DRAGON_SOUL_GRADE_RARE,
	    DRAGON_SOUL_GRADE_ANCIENT,
	    DRAGON_SOUL_GRADE_LEGENDARY,
	    DRAGON_SOUL_GRADE_MAX,

};

enum EDragonSoulStepTypes
	{
	    DRAGON_SOUL_STEP_LOWEST,
	    DRAGON_SOUL_STEP_LOW,
	    DRAGON_SOUL_STEP_MID,
	    DRAGON_SOUL_STEP_HIGH,
	    DRAGON_SOUL_STEP_HIGHEST,
	    DRAGON_SOUL_STEP_MAX,
	};


// [주의] 숫자(32) 하드코딩 주의. 현재 서버에서 용혼석 슬롯은 32부터임. 
	// 서버 common/length.h 파일의 EWearPositions 열거형이 32까지 확장될 것을 염두하고(32 이상은 확장 하기 힘들게 되어있음.), 
	// 그 이후부터를 용혼석 장착 슬롯으로 사용.
	const DWORD c_Wear_Max = 32;
	const DWORD c_DragonSoul_Equip_Start = c_ItemSlot_Count + c_Wear_Max;
	const DWORD c_DragonSoul_Equip_Slot_Max = 6;
	const DWORD c_DragonSoul_Equip_End = c_DragonSoul_Equip_Start + c_DragonSoul_Equip_Slot_Max * DS_DECK_MAX_NUM;

// NOTE: 2013년 2월 5일 현재... 용혼석 데크는 2개가 존재하는데, 향후 확장 가능성이 있어서 3개 데크 여유분을 할당 해 둠. 그 뒤 공간은 벨트 인벤토리로 사용
	const DWORD c_DragonSoul_Equip_Reserved_Count = c_DragonSoul_Equip_Slot_Max * 3;        

#ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
	    // 벨트 아이템이 제공하는 인벤토리
	    const DWORD c_Belt_Inventory_Slot_Start = c_DragonSoul_Equip_End + c_DragonSoul_Equip_Reserved_Count;
	    const DWORD c_Belt_Inventory_Width = 4;
	    const DWORD c_Belt_Inventory_Height= 4;
	    const DWORD c_Belt_Inventory_Slot_Count = c_Belt_Inventory_Width * c_Belt_Inventory_Height;
	    const DWORD c_Belt_Inventory_Slot_End = c_Belt_Inventory_Slot_Start + c_Belt_Inventory_Slot_Count;

    const DWORD c_Inventory_Count    = c_Belt_Inventory_Slot_End;
	#else
	    const DWORD c_Inventory_Count    = c_DragonSoul_Equip_End;
	#endif

// 용혼석 전용 인벤토리
	const DWORD c_DragonSoul_Inventory_Start = 0;
	const DWORD c_DragonSoul_Inventory_Box_Size = 32;
	const DWORD c_DragonSoul_Inventory_Count = CItemData::DS_SLOT_NUM_TYPES * DRAGON_SOUL_GRADE_MAX * c_DragonSoul_Inventory_Box_Size;
	const DWORD c_DragonSoul_Inventory_End = c_DragonSoul_Inventory_Start + c_DragonSoul_Inventory_Count;

enum ESlotType
	{
	    SLOT_TYPE_NONE,
	    SLOT_TYPE_INVENTORY,
	    SLOT_TYPE_SKILL,
	    SLOT_TYPE_EMOTION,
	    SLOT_TYPE_SHOP,
	    SLOT_TYPE_EXCHANGE_OWNER,
	    SLOT_TYPE_EXCHANGE_TARGET,
	    SLOT_TYPE_QUICK_SLOT,
	    SLOT_TYPE_SAFEBOX,
	    SLOT_TYPE_PRIVATE_SHOP,
	    SLOT_TYPE_MALL,
	    SLOT_TYPE_DRAGON_SOUL_INVENTORY,
	    SLOT_TYPE_MAX,
	};

enum EWindows
	{
	    RESERVED_WINDOW,
	    INVENTORY,                // 기본 인벤토리. (45칸 짜리가 2페이지 존재 = 90칸)
	    EQUIPMENT,
	    SAFEBOX,
	    MALL,
	    DRAGON_SOUL_INVENTORY,
	    GROUND,                    // NOTE: 2013년 2월5일 현재까지 unused.. 왜 있는거지???
	    BELT_INVENTORY,            // NOTE: W2.1 버전에 새로 추가되는 벨트 슬롯 아이템이 제공하는 벨트 인벤토리
	    
	    WINDOW_TYPE_MAX,
	};

enum EDSInventoryMaxNum
	{
	    DS_INVENTORY_MAX_NUM = c_DragonSoul_Inventory_Count,
	    DS_REFINE_WINDOW_MAX_NUM = 15,
	};

#pragma pack (push, 1)
	#define WORD_MAX 0xffff

typedef struct SItemPos
	{
	    BYTE window_type;
	    WORD cell;
	    SItemPos ()
	    {
	        window_type =     INVENTORY;
	        cell = WORD_MAX;
	    }
	    SItemPos (BYTE _window_type, WORD _cell)
	    {
	        window_type = _window_type;
	        cell = _cell;
	    }

    // 기존에 cell의 형을 보면 BYTE가 대부분이지만, oi
	    // 어떤 부분은 int, 어떤 부분은 WORD로 되어있어,
	    // 가장 큰 자료형인 int로 받는다.
	  //  int operator=(const int _cell)
	  //  {
	        //window_type = INVENTORY;
	  //      cell = _cell;
	  //      return cell;
	  //  }
	    bool IsValidCell()
	    {
	        switch (window_type)
	        {
	        case INVENTORY:
	            return cell < c_Inventory_Count;
	            break;
	        case EQUIPMENT:
	            return cell < c_DragonSoul_Equip_End;
	            break;
	        case DRAGON_SOUL_INVENTORY:
	            return cell < (DS_INVENTORY_MAX_NUM);
	            break;
	        default:
	            return false;
	        }
	    }
	    bool IsEquipCell()
	    {
	        switch (window_type)
	        {
	        case INVENTORY:
	        case EQUIPMENT:
	            return (c_Equipment_Start + c_Wear_Max > cell) && (c_Equipment_Start <= cell);
	            break;

        case BELT_INVENTORY:
	        case DRAGON_SOUL_INVENTORY:
	            return false;
	            break;

        default:
	            return false;
	        }
	    }

#ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
	    bool IsBeltInventoryCell()
	    {
	        bool bResult = c_Belt_Inventory_Slot_Start <= cell && c_Belt_Inventory_Slot_End > cell;
	        return bResult;
	    }
	#endif

    bool operator==(const struct SItemPos& rhs) const
	    {
	        return (window_type == rhs.window_type) && (cell == rhs.cell);
	    }

    bool operator<(const struct SItemPos& rhs) const
	    {
	        return (window_type < rhs.window_type) || ((window_type == rhs.window_type) && (cell < rhs.cell));
	    }
	} TItemPos;
	#pragma pack(pop)

const DWORD c_QuickBar_Line_Count = 3;
	const DWORD c_QuickBar_Slot_Count = 12;

const float c_Idle_WaitTime = 5.0f;

const int c_Monster_Race_Start_Number = 6;
	const int c_Monster_Model_Start_Number = 20001;

const float c_fAttack_Delay_Time = 0.2f;
	const float c_fHit_Delay_Time = 0.1f;
	const float c_fCrash_Wave_Time = 0.2f;
	const float c_fCrash_Wave_Distance = 3.0f;

const float c_fHeight_Step_Distance = 50.0f;

enum
	{
	    DISTANCE_TYPE_FOUR_WAY,
	    DISTANCE_TYPE_EIGHT_WAY,
	    DISTANCE_TYPE_ONE_WAY,
	    DISTANCE_TYPE_MAX_NUM,
	};

const float c_fMagic_Script_Version = 1.0f;
	const float c_fSkill_Script_Version = 1.0f;
	const float c_fMagicSoundInformation_Version = 1.0f;
	const float c_fBattleCommand_Script_Version = 1.0f;
	const float c_fEmotionCommand_Script_Version = 1.0f;
	const float c_fActive_Script_Version = 1.0f;
	const float c_fPassive_Script_Version = 1.0f;

// Used by PushMove
	const float c_fWalkDistance = 175.0f;
	const float c_fRunDistance = 310.0f;

#define FILE_MAX_LEN 128

enum
	{
	    ITEM_SOCKET_SLOT_MAX_NUM = 3,
	    ITEM_ATTRIBUTE_SLOT_MAX_NUM = 15,
	};

#pragma pack(push)
	#pragma pack(1)

typedef struct SQuickSlot
	{
	    BYTE Type;
	    BYTE Position;
	} TQuickSlot;

typedef struct TPlayerItemAttribute
	{
	    BYTE        bType;
	    short       sValue;
	} TPlayerItemAttribute;

typedef struct packet_item
	{
	    DWORD       vnum;
	    BYTE        count;
	#ifdef ENABLE_CHANGELOOK_SYSTEM
	    DWORD        transmutation;
	#endif    
	    DWORD        flags;
	    DWORD        anti_flags;
	    long        alSockets[ITEM_SOCKET_SLOT_MAX_NUM];
	    TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM];
	} TItemData;

typedef struct packet_shop_item
	{
	    DWORD       vnum;
	#ifdef ENABLE_FULL_YANG
	    long long    price;            // PC 상점에만 이용
	#else
	    DWORD        price;
	#endif
	    BYTE        count;
	    BYTE        display_pos;
	    long        alSockets[ITEM_SOCKET_SLOT_MAX_NUM];
	    TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM];
	#ifdef ENABLE_CHANGELOOK_SYSTEM
	    DWORD        transmutation;
	#endif    
	} TShopItemData;

#pragma pack(pop)

inline float GetSqrtDistance(int ix1, int iy1, int ix2, int iy2) // By sqrt
	{
	    float dx, dy;

    dx = float(ix1 - ix2);
	    dy = float(iy1 - iy2);

    return sqrtf(dx*dx + dy*dy);
	}

// DEFAULT_FONT
	void DefaultFont_Startup();
	void DefaultFont_Cleanup();
	void DefaultFont_SetName(const char * c_szFontName);
	CResource* DefaultFont_GetResource();
	CResource* DefaultItalicFont_GetResource();
	// END_OF_DEFAULT_FONT

void SetGuildSymbolPath(const char * c_szPathName);
	const char * GetGuildSymbolFileName(DWORD dwGuildID);
	BYTE SlotTypeToInvenType(BYTE bSlotType);

Modifié par Eristoff

En vous remerciant,

Cordialement, Eristoff

Lien à poster
  • 0

Bonjour,

 

Petit up, après avoir comparé ce fichier avec celui du client 2016 de la Team FE, je ne trouve pas d’où cela peux venir. Quelqu’un saurait-il m’aiguiller ?

 

Merci d’avance à tous

En vous remerciant,

Cordialement, Eristoff

Lien à poster
  • 0

Bonjour et merci de m’avoir répondu 

 

Tout fonctionne correctement et la légendaire est bien dans sont emplacement d’origine mais elle vient s’ajouter en plus dans mon inventaire à l’emplacement des ceintures. Et cela, seulement avec la diamant légendaire

 

Merci d’avance

En vous remerciant,

Cordialement, Eristoff

Lien à poster
  • 0

Bonjour et merci d'avoir répondu,

 

voici une Diamant-dragon légend. (pose soucis, ce place dans l'emplacement des ceintures dans l'inventaire) :

"114400~114499"    "ĖѭҞ |ܳG کئܮ"    "ITEM_DS"    "DS_SLOT1"    1    "ANTI_SELL | ANTI_STACK | ANTI_SAFEBOX"    "NONE"    "NONE"    "NONE"    0    0    0    0    0    "TIMER_BASED_ON_WEAR"    86400    "LIMIT_NONE"    0    "APPLY_NONE"    0    "APPLY_NONE"    0    "APPLY_NONE"    0    0    0    0    0    0    0    0    0    0    8    0

 

et une Rubis-dragon légend. (qui ne pose pas de soucis) :

"124400~124499"    "ĖѭҞ |ܳG ȭئܮ"    "ITEM_DS"    "DS_SLOT2"    1    "ANTI_SELL | ANTI_STACK | ANTI_SAFEBOX"    "NONE"    "NONE"    "NONE"    0    0    0    0    0    "TIMER_BASED_ON_WEAR"    86400    "LIMIT_NONE"    0    "APPLY_NONE"    0    "APPLY_NONE"    0    "APPLY_NONE"    0    0    0    0    0    0    0    0    0    0    8    1

 

Merci d'avance

En vous remerciant,

Cordialement, Eristoff

Lien à poster
  • 0

Bonjour et merci d'avoir répondu,

 

Aucune erreur concernant ce système à été reporté

Je vais essayer de contacter l'auteur

 

J'ai seulement cette légendaire qui me dérange et cela arrive que avec la diamant

 

 

Merci d'avance

En vous remerciant,

Cordialement, Eristoff

Lien à poster
  • 0
  • Développeur

Salut,

 

Tu as regardé si ton slot était assigné à la bonne position dans les sources de ton client (gametype.h comme suggéré par Wild) ?

Par la même occasion, tu as regardé si ton dump_proto était compatible avec tes sources ? Un simple décalage peut affecter tout un système.

Lien à poster
Invité
Ce sujet ne peut plus recevoir de nouvelles réponses.


×
×
  • 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.