Készség könyv név chatben

Indította udvatt108, 2017-11-22, 18:03:58

Hali.

Hogyan tudom a készség könyv nevét a chatban kiírni amikor felveszem a földről vagy kereskedek és úgy kapom meg?

A készségkönyv neve a földön megjelenik mert azt beraktam a kliensbe, viszont szeretném ha chatben és eldobásnál is az item neve megjelenne teljesen.

Valakinek van ötlete?
Egy programozási nyelv akkor alacsony szintű, ha arra kényszeríti az embert, hogy az érdektelen dolgokra is odafigyeljen.

A linkelésre gondolsz?
Mert akkor ott is ki kell ugyanúgy egészíteni a dolgot ahogy a földön lévő cuccosnál.

2017-11-22, 20:39:15 #2 Utolsó szerkesztés: 2017-11-22, 21:05:32 Szerző: udvatt108
 A tárgy kidobás és felvételnél gondoltam.

A tárgy kidobás rákérdezésnél már kiötlöttem egy megoldást: slotPos -> GetItemMetinSocket -> GetSkillName

Szerver oldalon most a skill könyv felvételét próbálom megoldani, hogy teljes nevét írja ki.

Üzenet összefésülés: 2017-11-22, 21:04:36

Idáig jutottam eddig:


string name = "";
if (item2->GetVnum() == 50300) {
int SocketBookID = item2->GetSocket(0);
name = "Itt szeretném kikérni a grade data-t valahogy igy, de ez kliens oldali metódus: c_pSkillData->GradeData[0].strName.c_str();"
name += " ";
}
name += item2->GetName();
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 획득: %s"), name);
Egy programozási nyelv akkor alacsony szintű, ha arra kényszeríti az embert, hogy az érdektelen dolgokra is odafigyeljen.

Szerintem szerver oldalon nincs ilyen név lekérdezés, hisz ott nincs is rá szükség. (ha mégis akk sry)
Esetleg ha ez működik:
const CSkillProto* pkSk = CSkillManager::instance().Get(dwSkillVnum);
Akkor skill ID alapján le tudod kérni az adatait, és van egy olyan adattagja h "szName". Ha szerencséd van ez az amire szükséged van.

2017-11-22, 22:11:25 #4 Utolsó szerkesztés: 2017-11-22, 22:50:15 Szerző: udvatt108
A karakter kodolás nem tetszik neki...

Hoigy egységesítsem, mert már vagy 20 féle képpen próbáltam...

Nem tetszik ha az egyik cost char, vagy std:string vagy sima char probáltam konverktálni c_str()...

Mert a  "pkSk.szName" az "char" és a "item2->GetName()" az const char *, de nekem meg stringbe kell formáznom.


std::string std = "";
if (item2->GetVnum() == 50300) {
DWORD SocketBookID = item2->GetSocket(0);
const CSkillProto* pkSk = CSkillManager::instance().Get(SocketBookID);

if (NULL != pkSk){
std = pkSk.szName;
}
}

std = std + item2->GetName();
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ľĆŔĚĹŰ Čąµć: %s"), std.c_str());


Üzenet összefésülés: 2017-11-22, 22:25:10

Nah sodrófaa most már lefordul, sikerált összehangolni, mindjárt tesztelem.

Üzenet összefésülés: 2017-11-22, 22:50:15

Ilyen krixkraxokat jelenit meg ha az szName-val kérem le a nevét, ez micsoda? A koreai neve a skill könyvnek?

Csatoltam a képet.
Egy programozási nyelv akkor alacsony szintű, ha arra kényszeríti az embert, hogy az érdektelen dolgokra is odafigyeljen.


Igen ez a koreai neve ami az item proto.txt-be van.

De ezt hogy tegyem át magyarra? Hogy nézessem vele az item_names-txt-ből?
Egy programozási nyelv akkor alacsony szintű, ha arra kényszeríti az embert, hogy az érdektelen dolgokra is odafigyeljen.

Sehogy, mivel nincs külön kk minden skillre:
50300 Készségkönyv
1 van, és ennek a socket0-jába írja bele a skill id-jét amihez tartozik asszem.
Szóval ink skill_protoval kéne trükközni, hogy az legyen magyar és működjön.
am a pkSk.szName-mel van a gond, nem az item2->GetName-mel.

vagy irok bele egy localeName metódust ami a item_names ból szedi ki a magyar nevet. Éppen forditom már mert ami azt illeti meg is irtam xD
Egy programozási nyelv akkor alacsony szintű, ha arra kényszeríti az embert, hogy az érdektelen dolgokra is odafigyeljen.

item_names?
Te megcsináltad minden skillre külön a kk-t? :o :o :o

Átvitt értelemben gyárilag bent van. Ne kérdezd. Nem tudom hogyan.

Üzenet összefésülés: 2017-11-22, 23:22:45

Az ötletem nem vált be, a funkció nem kéri ki mert nem létezőnek érzékeli...
Egy programozási nyelv akkor alacsony szintű, ha arra kényszeríti az embert, hogy az érdektelen dolgokra is odafigyeljen.

Őm... sztem skill_power.txt-ből szedi a dolgot:
48 Č­Á¶ĆÄ 5 7 9 11 13 15 17 19 20 22 24 26 28 30 32 34 36 38 40 50 52 55 58 61 63 66 69 72 75 80 82 84 87 90 95 100 110 120 130 150
Kérdés hogy elromlik-e vmi ha te itt lemagyarosítod.

2017-11-23, 07:07:12 #12 Utolsó szerkesztés: 2017-11-23, 07:13:48 Szerző: udvatt108
Úgy néz ki, hogy az item_proto.txt-ből nézi, mert a skill.cpp,skill.h ezt hívja meg, majd veti össze az item_names.txt-vel amikor a nevét kéred le az sz_Name-val. Valamint az itemp_proto.txt-ben vannak deklarálva a könyvek koreak nevek és ID szerint, és item_names.txt-ben is deklarálva vannak a könyvek név és ID szerint, de itt már magyarul. Nyilván így magyarít a rendszer.


De lehet,hogy csinálok egy skill_names.txt-t azt abba minden socket ID-hez rendelve beírom a magyar skill nevét és cpp-ben csinálok egy kiolvasó funkciót azt cső.
Egy programozási nyelv akkor alacsony szintű, ha arra kényszeríti az embert, hogy az érdektelen dolgokra is odafigyeljen.

Nemtudom nálad hogy van, alapból 1 KK van csak, és a socketbe menti el melyik skillhez van.
Ha te megcsináltad minden skillhez külön a kk-t akk valóban item_namesből kéne olvasnia, de akkor meg azt nem értem h miért van gond a kiolvasással, hisz ha mindhez van, akk mindhez megadtad a skill nevével együtt nem? ???

Az a baj, hogy török sf-et használok. Szóval egyszer sem biztos hogy külön id-n vannak a könyvek.
Egy programozási nyelv akkor alacsony szintű, ha arra kényszeríti az embert, hogy az érdektelen dolgokra is odafigyeljen.

Azért mondom próbálkozz meg skill_powerrel, mert amint láttad amit kimásoltam belőle, 100%-ban egyezik azzal amiről küldtél képet h kóreaiul írja ki. Mivel a skill nevét kérdezted le CSkillManager-rel.
Nem biztos, de én nagyon arra tippelek, vagy esetleg navicatból tölti. Egyéb opció szerintem nincs, szóval próbáld meg külön-külön átírni 1 skill-ét és meglátod.
Ha még megvan a kk amiről a képet csináltad akkor pont jó mert tudod h a 48-as skill-t kell magyarosítanod :P

Én ezt használom, magyar skill_proto.sql-lel és múkodik.
[spoiler]const char * CItem::GetName()
{
static char szTemp[128];
memset(szTemp, 0, sizeof(szTemp));
if (GetProto())
{
int len = 0;
switch (GetType())
{
case ITEM_POLYMORPH:
{
const DWORD dwMobVnum = GetSocket(0);
const CMob* pMob = CMobManager::instance().Get(dwMobVnum);
if (pMob)
len = snprintf(szTemp, sizeof(szTemp), "%s", pMob->m_table.szLocaleName);
break;
}
case ITEM_SKILLBOOK:
case ITEM_SKILLFORGET:
{
const DWORD dwSkillVnum = (GetVnum() == 50300 || GetVnum() == 70037) ? GetSocket(0) : 0;
const CSkillProto* pSkill = (dwSkillVnum != 0) ? CSkillManager::instance().Get(dwSkillVnum) : NULL;
if (pSkill)
len = snprintf(szTemp, sizeof(szTemp), "%s", pSkill->szName);
break;
}
}
len += snprintf(szTemp + len, sizeof(szTemp) - len, (len>0)?" %s":"%s", GetProto()->szLocaleName);
}

return szTemp;
}
[/spoiler]

Igen, de a "pkSk->szName"-vel kérem ki a nevet akkor a koreai nevét írja ki.

A butított kód:

const CSkillProto* pkSk = CSkillManager::instance().Get(item->GetSocket(0));
if (NULL != pkSk){
std = pkSk->szName;
}
Egy programozási nyelv akkor alacsony szintű, ha arra kényszeríti az embert, hogy az érdektelen dolgokra is odafigyeljen.

Talán ha magyar lenne a skill_proto-d akkor magyarul írná :o

Igen mondtam h vagy azt magyarosítsa le v a powert. ;D