[C++] Ceruza

Indította Distraught, 2018-05-10, 17:48:51

2018-05-10, 17:48:51 Utolsó szerkesztés: 2018-05-10, 18:04:05 Szerző: Distraught
Heyhoo újra :D

Ez is fabtam11 javaslata volt és mencinek találtam, szóval megvalósítottam és most publikálom nektek :D A lényeg, hogy van 5 színű ceruza, ha felveszed őket, olyan színű lesz az írásod, mint amit felvettél.



Kezdjük a kliens oldallal. Végig a UserInterface-ben fogunk dolgozni.

Nyisd meg a packet.h-t.
Keresd meg:

typedef struct packet_chatting
{
BYTE header;
WORD size;
BYTE type;
DWORD dwVID;
BYTE bEmpire;
} TPacketGCChat;


Cseréld ki:

typedef struct packet_chatting
{
BYTE header;
WORD size;
BYTE type;
DWORD dwVID;
BYTE bEmpire;
BYTE TypingColor;
} TPacketGCChat;


Nyisd meg a PythonNetworkStreamPhaseGame.cpp -t és keres meg a RecvChatPacket függvényt.
Ebben a függvényben keresd meg az alábbi részt:

TPacketGCChat kChat;
TPacketGCChat kChat;
char buf[1024 + 1];
char line[1024 + 1];


Tedd be mögé:

string colored_p;
string colored_buf;


Menj lejjebb a

_snprintf(line, sizeof(line), "%s", p);

sorig.

Elé rakd ezt be:

switch (kChat.TypingColor)
{
case 1:
colored_p = "|cff00ffff" + string(p) + "|r";
colored_buf = "|cff00ffff" + string(buf) + "|r";
break;
case 2:
colored_p = "|cffff0000" + string(p) + "|r";
colored_buf = "|cffff0000" + string(buf) + "|r";
break;
case 3:
colored_p = "|cffADFF2F" + string(p) + "|r";
colored_buf = "|cffADFF2F" + string(buf) + "|r";
break;
case 4:
colored_p = "|cffFF4500" + string(p) + "|r";
colored_buf = "|cffFF4500" + string(buf) + "|r";
break;
case 5:
colored_p = "|cffC67171" + string(p) + "|r";
colored_buf = "|cffC67171" + string(buf) + "|r";
break;
default:
colored_p = string(p);
colored_buf = string(buf);
break;
}


Most a már említett

_snprintf(line, sizeof(line), "%s", p);

sort módosítsd:

_snprintf(line, sizeof(line), "%s", colored_p.c_str());


Most keresd meg szintén ebben a függvényben a

if (pkInstChatter->IsPC())
CPythonChat::Instance().AppendChat(kChat.type, buf);

részt.
Itt a

CPythonChat::Instance().AppendChat(kChat.type, buf);

sort módosítsd:

CPythonChat::Instance().AppendChat(kChat.type, colored_buf.c_str());


Fordítsd le a klienst binary-t.

A dump_proto-nkba bele kell tenni az új tárgy típusát.
ItemCSVReader.cpp-ben keresd meg a get_Item_SubType_Value függvényt és a arSub16 tömböt írd felül erre:

string arSub16[] = { "UNIQUE_NONE", "UNIQUE_BOOK", "UNIQUE_SPECIAL_RIDE", "UNIQUE_SPECIAL_MOUNT_RIDE", "UNIQUE_COLOR", "UNIQUE_5",
"UNIQUE_6", "UNIQUE_7", "UNIQUE_8", "UNIQUE_9", "USE_SPECIAL"};


Fordítsd le. Az új item_protot majd ezzel csomagold már be.

Most jön a szerver oldal.
Kezdjük a game mappában a dolgokat.

Nyisd meg a packet.h fájlt.
Keress rá:

typedef struct packet_chat // 가변 패킷
{
BYTE header;
WORD size;
BYTE type;
DWORD id;
BYTE bEmpire;
} TPacketGCChat;


Módosítsd:

typedef struct packet_chat // 가변 패킷
{
BYTE header;
WORD size;
BYTE type;
DWORD id;
BYTE bEmpire;
BYTE TypingColor;
} TPacketGCChat;


Nyisd meg az input_main.cpp-t és keresd meg a Chat függvényét.
Keresd meg a

pack_chat.header = HEADER_GC_CHAT;
pack_chat.size = sizeof(TPacketGCChat) + len;
pack_chat.type = pinfo->type;
pack_chat.id = ch->GetVID();

részt és módosítsd:

pack_chat.header = HEADER_GC_CHAT;
pack_chat.size = sizeof(TPacketGCChat) + len;
pack_chat.type = pinfo->type;
pack_chat.id = ch->GetVID();
pack_chat.TypingColor = ch->GetTypingColor();


Nyisd meg a char.h fájlt és keresd meg a

bool m_bWalking;

részt.
Elé tedd be:

BYTE TypingColor;


Keresd meg:

bool IsStateMove() const { return IsState((CState&)m_stateMove); }

Tedd be elé:

BYTE GetTypingColor() { return TypingColor; }
BYTE SetTypingColor(BYTE _c) { TypingColor = _c; }


Nyisd meg a char.cpp-t és keresd meg az Initialize függvényét.
Tedd a végére:

TypingColor = 0;


Nyisd meg az item.cpp-t és keresd meg az EquipTo függvényét.
Az elején látod ezt a részt:

if (!ch)
{
sys_err("EquipTo: nil character");
return false;
}

Tedd be mögé:

if(GetType() == ITEM_UNIQUE && GetSubType() == UNIQUE_COLOR)
ch->SetTypingColor(GetValue(1));


Keresd meg az Unequip függvényt.
A függvényben keresd meg ezt a részt:

if (this != m_pOwner->GetWear(GetCell() - INVENTORY_MAX_NUM))
{
sys_err("m_pOwner->GetWear() != this");
return false;
}

Mögé tedd be:

if(GetType() == ITEM_UNIQUE && GetSubType() == UNIQUE_COLOR)
m_pOwner->SetTypingColor(0);


Menj a common mappába és nyisd meg az item_length.h fájlt.
Keresd meg:

enum EUniqueSubTypes
{
UNIQUE_NONE,
UNIQUE_BOOK,
UNIQUE_SPECIAL_RIDE,
UNIQUE_SPECIAL_MOUNT_RIDE,
};

Módosítsd:

enum EUniqueSubTypes
{
UNIQUE_NONE,
UNIQUE_BOOK,
UNIQUE_SPECIAL_RIDE,
UNIQUE_SPECIAL_MOUNT_RIDE,
UNIQUE_COLOR,
};


Fordítsd le a game fájlt.

Most jön a db.
Nyisd meg a ProtoReader.cpp fájlt és keresd meg a get_Item_SubType_Value függvényt.
Módosítsd a arSub16 tömböt erre:

static string arSub16[] = { "UNIQUE_NONE", "UNIQUE_BOOK", "UNIQUE_SPECIAL_RIDE", "UNIQUE_SPECIAL_MOUNT_RIDE", "UNIQUE_COLOR", "UNIQUE_5",
"UNIQUE_6", "UNIQUE_7", "UNIQUE_8", "UNIQUE_9", "USE_SPECIAL"};


Fordítsd le a db-t is.

Most tegyük be a tárgyat.

item_proto:

20111 pencil_cyan ITEM_UNIQUE UNIQUE_COLOR 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP LOG WEAR_SHIELD 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 1 0 0 0 0 0 0 0
20112 pencil_cyan ITEM_UNIQUE UNIQUE_COLOR 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP LOG WEAR_SHIELD 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 2 0 0 0 0 0 0 0
20113 pencil_cyan ITEM_UNIQUE UNIQUE_COLOR 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP LOG WEAR_SHIELD 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 3 0 0 0 0 0 0 0
20114 pencil_cyan ITEM_UNIQUE UNIQUE_COLOR 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP LOG WEAR_SHIELD 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 4 0 0 0 0 0 0 0
20115 pencil_cyan ITEM_UNIQUE UNIQUE_COLOR 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP LOG WEAR_SHIELD 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 5 0 0 0 0 0 0 0


item_names:

20111 Ceruza
20112 Ceruza
20113 Ceruza
20114 Ceruza
20115 Ceruza


item_list:

20111 ETC icon/item/color_cyan.tga
20112 ETC icon/item/color_red.tga
20113 ETC icon/item/color_green.tga
20114 ETC icon/item/color_orange.tga
20115 ETC icon/item/color_brown.tga


Ikonok a csatolmányban.

Hajrá ;)

C++ programmer at Gameloft