Metin2 Hungarian Forum

Metin2 => Szerver készítés => Privát szerverek => Segítség => A témát indította: udvatt108 Dátum 2017-11-22, 18:03:58

Cím: Készség könyv név chatben
Írta: udvatt108 Dátum 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?
Cím: Re:Készség könyv név chatben
Írta: 5310pati Dátum 2017-11-22, 20:27:49
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.
Cím: Re:Készség könyv név chatben
Írta: udvatt108 Dátum 2017-11-22, 20:39:15
 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);
Cím: Re:Készség könyv név chatben
Írta: 5310pati Dátum 2017-11-22, 21:41:09
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.
Cím: Re:Készség könyv név chatben
Írta: udvatt108 Dátum 2017-11-22, 22:11:25
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.
Cím: Re:Készség könyv név chatben
Írta: 5310pati Dátum 2017-11-22, 22:53:33
Hát úgy néz ki :-\ ;D
Cím: Re:Készség könyv név chatben
Írta: udvatt108 Dátum 2017-11-22, 22:58:30
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?
Cím: Re:Készség könyv név chatben
Írta: 5310pati Dátum 2017-11-22, 23:08:57
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.
Cím: Re:Készség könyv név chatben
Írta: udvatt108 Dátum 2017-11-22, 23:10:28
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
Cím: Re:Készség könyv név chatben
Írta: 5310pati Dátum 2017-11-22, 23:13:45
item_names?
Te megcsináltad minden skillre külön a kk-t? :o :o :o
Cím: Re:Készség könyv név chatben
Írta: udvatt108 Dátum 2017-11-22, 23:21:40
Á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...
Cím: Re:Készség könyv név chatben
Írta: 5310pati Dátum 2017-11-22, 23:27:50
Ő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.
Cím: Re:Készség könyv név chatben
Írta: udvatt108 Dátum 2017-11-23, 07:07:12
Ú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ő.
Cím: Re:Készség könyv név chatben
Írta: 5310pati Dátum 2017-11-23, 18:07:49
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? ???
Cím: Re:Készség könyv név chatben
Írta: udvatt108 Dátum 2017-11-23, 18:09:36
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.
Cím: Re:Készség könyv név chatben
Írta: 5310pati Dátum 2017-11-23, 18:11:55
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
Cím: Re:Készség könyv név chatben
Írta: [VIP]P3NG3R Dátum 2017-11-23, 18:19:07
É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]
Cím: Re:Készség könyv név chatben
Írta: udvatt108 Dátum 2017-11-23, 18:38:13
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;
}
Cím: Re:Készség könyv név chatben
Írta: [VIP]P3NG3R Dátum 2017-11-23, 18:41:25
Talán ha magyar lenne a skill_proto-d akkor magyarul írná :o
Cím: Re:Készség könyv név chatben
Írta: 5310pati Dátum 2017-11-23, 18:44:32
Igen mondtam h vagy azt magyarosítsa le v a powert. ;D
Cím: Re:Készség könyv név chatben
Írta: udvatt108 Dátum 2017-11-23, 18:50:43
Nem mertem, ne hogy elrontson valamit. (FUCK MY LOGIC)

Közben írtam egy funkciót ami kiolvassa fájlból id alapján a skill neveket:

std::ifstream file("skill_book_names.txt");
if (file){
int key;
std::string value;
std::map<int, std::string> skillBookNamesMap;

while (file >> key && file >> value){
skillBookNamesMap[key] = value;
}
std::map<int, std::string>::iterator it;
it = skillBookNamesMap.find(item->GetSocket(0));
if (it != skillBookNamesMap.end()){
std = std + it->second;
}
}
file.close()

Cím: Re:Készség könyv név chatben
Írta: 5310pati Dátum 2017-11-23, 18:58:44
Mert nem tudsz nyomni egy Ctrl+C/V-t a fájlra/táblára? :o ??? :-X :'(
Cím: Re:Készség könyv név chatben
Írta: [VIP]P3NG3R Dátum 2017-11-24, 00:12:19
Madzsar, túl bonyolítani minden.
EhPortal 1.39 © 2025, WebDev