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.
(https://i.imgur.com/xSBlrQT.jpg)
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á ;)