Nacitani testu z TXT souboru - souborovy system.. – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Nacitani testu z TXT souboru - souborovy system.. – C / C++ – Fórum – Programujte.comNacitani testu z TXT souboru - souborovy system.. – C / C++ – Fórum – Programujte.com

 

Ivo0
Duch
28. 10. 2006   #1
-
0
-

Ahoj, mam zdrojove kody hry Aliens vs. Predator 2, vyvijim pro ni SERVER-SIDE aplikaci (OBJECT.LTO) ktera dava hre novy funkce, a podobne
viz: http://aliensvspredator2.filefront.com/file/Rommies_Serverside_Mod;70940


jsou tam veci jako ochrana prez crashem serveru (kontrolovani zprav na % a jine specialni znaky mimo mnou udane rozmezi ASCII jejich prepis na neco jinyho, Force Observe Mode - uplne nova fce na kterou jsem moc pysny - uzamkne "zleho" hrace ve standartnim modu kamery ktery je dostupny ve hre, ale odstrani mu tlacitko RESPAWN takze nemuze hrat- :D a podobne)

ale ted jsem narazil na problem.. mam napriklad:


// Zprava
char szKickMsg[128];
sprintf(szKickMsg, "Player %u-%s has been KICKED from server." , m_ClientData[nIndex].m_nClientID,m_ClientData[nIndex].m_Data.m_szName);

// Rekneme Vsem Co Se Stalo
HMESSAGEWRITE hMessage = g_pLTServer->StartMessage(NULL, MID_MPMGR_MESSAGE);
hMessage->WriteDWord(-1);
hMessage->WriteString(szKickMsg);
g_pLTServer->EndMessage(hMessage);




a chtel bych aby se misto Player "Player %u-%s has been KICKED from server." nacital text nastaveny v TXT souboru (aby si kazdy majitel serveru mohl tyhle zpravy udelat podle sebe, od prevzeti kontroly, prez kick az po prepnuti hrace do force observe modu) ale nevim jak na to :'(

muze mi nekdo poradit?
Vubec nemam predstavu jak neco takovyho udelat, s timhle nemam vubec zadnou zkusenost, v C++ jsem skutecne NOOOOB maximalni, zvladl jsem jednoduche veci, ale tohle uz je name moc :(


Pokud mi nekdo muze poradit.. prosim kontaktujte me na ICQ: 196-924-548 nebo MSN: fazolecz@email.cz a nebo na MAILU: info@avp2.org
a nebo aspon tady.. treba nejak internetova db kde by byl nejaky navod nebo tak neco.. ja proste nevim :(

Diky moc..

Nahlásit jako SPAM
IP: ...–
{HR}DeepEye
Jura_0
Stálý člen
28. 10. 2006   #2
-
0
-

Jinak nez zasahem do zdrojaku hry to asi nepujde. Kazdopadne na serveru Ceskehry.cz o tom vysly dva zajimave clanky:
Jak připravit hru na snadnou lokalizaci - 1., 2. díl
http://www.ceskehry.cz/magazin/

Nahlásit jako SPAM
IP: ...–
Ivo0
Duch
28. 10. 2006   #3
-
0
-

ehm ne.. to jsme si asi nerozumeli.. to neni o zasahu do zdrojaku HRY, tady je treba zasahovat do zdrojaku toho modu (ty ja mam) v C++ je proste ta zprava napsana primo v C++ tak jak jsem to sem pastnul, ja ale potrebuju aby to bralo ten text z TXT souboru(?) misto aby to psalo ty texty ze zkompilovanyho modu tak aby je to psalo z definovanyho textaku.. jako ma ta hra trenba nastaveni serveru:


[Settings]
Dedicated = 1
PortID = 27888
Password = "AVP2"
LANConnection = 0
Locked = 0
ServerName = "{HR}Rommie's EVAC server (P/H)"
SCPassword = "alieni"
Bandwidth = 10000000
GameType = 6

[Deathmatch]
Map00 = "worldsmultidmdm_alesserfate"
Map01 = "worldsmultidmdm_compound"
Map02 = "worldsmultidmdm_fury151"
Map03 = "worldsmultidmdm_leadworks"
Map04 = "worldsmultidmdm_lucifer'sfate"
Map10 = ""
Map05 = "worldsmultidmdm_outpost4"
Map11 = ""
Map06 = "worldsmultidmdm_quarantine"
Map12 = ""
Map07 = "worldsmultidmdm_reservoir"
Map13 = ""
Map08 = "worldsmultidmdm_verloc"
Map14 = ""



a podobne tak aby v tom textaku bylo neco jako


KickMsg = "Player %s-%d has been kicked"
MuteMsg = "Player %s-%d has been SHUTED UP!"
NLMsg = "Admin set map to NEXT"
FomMsg = "Player %s-%d has been put in to FORCE observe mode"

atd...

a aby ten u koho ten server bezi ti to mohl menit, aby to bylo uzlozeny treba v textaku RommiesServerModeSettings.txt

a ve zdrojacich aby to bralo jenom cislo radku nebo oznaceni radku treba #KickMsg

hMessage->WriteString(szKickMsg); ale aby to to KickMsg nebralo z definice nad sebou ale z toho textaku.

Nahlásit jako SPAM
IP: ...–
{HR}DeepEye
zacatecnik0
Super člen
28. 10. 2006   #4
-
0
-

princip je tento:
1) najdes misto v txt kde se pise kdo byl kicked (_fstrstr, strstr)
2) ulozis si to do promenne
3) udelas to: hrac ktery byl vyhozen :%s , hrac

snadne :P
ps: kdyz sem hodis ten radek kodu a tu funkci printf sepisu ti to
cau

Nahlásit jako SPAM
IP: ...–
Můj blog http://www.zacatecnik.wu.cz[br]Překládám anglickou knihu o wxWidgets http://wxwidgets.hustej.net
Ivo0
Duch
28. 10. 2006   #5
-
0
-

Ve zdrojaku vypada ta zprava takhle:


// Zprava
char szKickMsg[128];
sprintf(szKickMsg, "Player %u-%s has been KICKED from server." , m_ClientData[nIndex].m_nClientID,m_ClientData[nIndex].m_Data.m_szName);

// Rekneme Vsem Co Se Stalo
HMESSAGEWRITE hMessage = g_pLTServer->StartMessage(NULL, MID_MPMGR_MESSAGE);
hMessage->WriteDWord(-1);
hMessage->WriteString(szKickMsg);
g_pLTServer->EndMessage(hMessage);



ta kterou ja nechci (ta co to taha ze zkompilovanyho modu)

to potrebuju predelat aby to cetlo z textaku :)



celej prikaz pro kick vypada takhle:




else if(!_strnicmp(szMsg, "nk", 2))
{
if(strlen(szMsg) > 3)
{
// Finds the next non-space character
char *szName = szMsg + 2;

// Get rid of leading spaces
while(*szName == ' ')
szName++;


// Find the named client
int nIndex = FindClient(atoi(szName));

if(nIndex != -1)
{

// Message
char szKickMsg[128];
sprintf(szKickMsg, "Player %u-%s has been KICKED from server." , m_ClientData[nIndex].m_nClientID,m_ClientData[nIndex].m_Data.m_szName);

// tell everyone about this change
HMESSAGEWRITE hMessage = g_pLTServer->StartMessage(NULL, MID_MPMGR_MESSAGE);
hMessage->WriteDWord(-1);
hMessage->WriteString(szKickMsg);
g_pLTServer->EndMessage(hMessage);

g_pLTServer->KickClient(m_ClientData[nIndex].m_hClient);

}

bCommandHandled = LTTRUE;
}
}

Nahlásit jako SPAM
IP: ...–
{HR}DeepEye
zacatecnik0
Super člen
29. 10. 2006   #6
-
0
-

ted sem staval tak sem to snad dobre pochopil kdyz tak me oprav.....

takze mas:
[color=green]// Zprava [/color]
[color=blue]char szKickMsg[128];
sprintf(szKickMsg, "Player %u-%s has been KICKED from server." ,
m_ClientData[nIndex].m_nClientID,m_ClientData[nIndex].m_Data.m_szName); [/color]

a chces aby to bral z txt
ale to je preci tak snadne
[color=green]
//otevreni txt souboru[/color]
[color=blue]
HFILE hFile;
hFile = CreateFile( "txt.txt", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if( hFile == INVALID_HANDLE_VALUE)
MessageBox(g_hWnd, TEXT("Soubot txt neexistuje!"),
NULL, MB_ICONERROR | MB_TASKMODAL);[/color]
[color=green]
//deme cist[/color]
[color=blue]
DWORD dwActBytes; // really read bytes
TCHAR szRetezecKamSiToUlozim[200];
int iBudemeCistZnaku;
int iPozice;
[/color] [color=green]// pokud neznas dopredu pozici musis nacist cely soubor a hleda jak
//sem psal pomoci strstr ![/color] [color=blue]
SetFilePointer(hFile, iPozice,NULL,FILE_BEGIN);
if(!ReadFile(hFile, szRetezecKamSiToUlozim, iPBudemeCistZnaku, &dwActBytes, NULL))
MessageBox(g_hWnd, TEXT("Nepoda?ilo se ??st ze souboru nastaven?!"),
NULL, MB_ICONERROR | MB_TASKMODAL);[/color]


easy ze ;-)
poznmka: pokud jak rikas nerozumis C ani zamak tak to nema cenu preci neco predelavat....!

Nahlásit jako SPAM
IP: ...–
Můj blog http://www.zacatecnik.wu.cz[br]Překládám anglickou knihu o wxWidgets http://wxwidgets.hustej.net
Ivo0
Duch
29. 10. 2006   #7
-
0
-

no tak ne uplne nerozumim.. trochu se v tom orientuju zacinam.. ale temhle vecem nerozumim.. umim udelat funkci co ma neco provest s hracem, zabranit mu pouzivat morphacky a podobne, ale to je snadny.. ale tyhle zpravy a cteni ze souboru.. to absolutne neovladam :)



Du to zkusit..

Nahlásit jako SPAM
IP: ...–
{HR}DeepEye
zacatecnik0
Super člen
29. 10. 2006   #8
-
0
-

nice,
a co mi jako s tim? mas tam zdrojak a zadas nas o reseni kazdej trochu znalej by to pochopil a jel dle mych rad dal (alespon tomu verim :D )
to ze neumis C potazmo Win32API neni az tak vazne, svet se nezbori, vaznejsi je ale ze pises ze vyvijis
coz si protireci....
sorry jestli si vylejvam vztek na tobe ale je tezky se udrzet kdyz ti za par hodek napise 20 lidi ze chtej tohle tamto...haled ja taky nejsem zadnej guru ale sanzim se. Toze ty tohle nechapes a zaroven chces vyvijet ten mod nebo co toje je ocividne ze je to nad tve sily. musis holt zacit od pocatku nebo vubec!


zacni console aplikacema
http://builder.cz/serial3.html

pokud zvladas informuj se co je Win32API
http://builder.cz/serial91.html

za cca 5-12 mesicu budes chapat vse potrebne


pokud chces radit dal musis rikat: kde ti to pada, co konkretne nechapes, co je tohle tamto, jak udelat to ci ono. to ze clovek rekne neco nechapu (nemyslim jen tvuj pripad jejich miliony)mi casto rikame nejsme majiteli kristalovych kouli :)

cau

Nahlásit jako SPAM
IP: ...–
Můj blog http://www.zacatecnik.wu.cz[br]Překládám anglickou knihu o wxWidgets http://wxwidgets.hustej.net
Ivo0
Duch
29. 10. 2006   #9
-
0
-

hm, no tady je zasadni ze me to jeste v zivote nespadlo :D

jediny co nechapu jsou ty zpravy a to ani nepotrebuju..

:D

tohle byl jediny problem v moji praci za posledniho pul roku ;) a ten je nyni vyresen. diky ti.

muzu bez problemu pokracovat ted v chack ammo a check message ale to je uz pohoda :)

Nahlásit jako SPAM
IP: ...–
{HR}DeepEye
zacatecnik0
Super člen
29. 10. 2006   #10
-
0
-

Hej fakt? Ja myslel, ze si lama a tak... Aha, no tak sorry, mno zpravy ti taky muzu vysvetlit, pokud ti to nejde, ale rekni ty zase me co je check ammo ?

Nahlásit jako SPAM
IP: ...–
Můj blog http://www.zacatecnik.wu.cz[br]Překládám anglickou knihu o wxWidgets http://wxwidgets.hustej.net
Ivo0
Duch
29. 10. 2006   #11
-
0
-

check ammo... to je fukce jako check message.. check message kontroluje zpravu jestli v ni nejsou znaky jako % ? a podobne.. haxeri toho vyuzivaji p?ro hack nicku aby je neslo kicknout.

ta fce vypada asi takhle:

// -------------------------------------------------------------------- //
//
// FUNCTION: MultiplayerMgr::CheckMessage()
//
// PURPOSE: Check message for special characters
//
// -------------------------------------------------------------------- //

LTBOOL MultiplayerMgr::CheckMessage(char* szMessage)
{
LTBOOL bChanged = LTFALSE;
int iMsgLen = strlen(szMessage);

for(unsigned i=0; i<iMsgLen; i++)
{
if((int)szMessage[i] < 32 || (int)szMessage[i] > 127)
{
//we have an illigal character, kick him, mute him, its up to you
szMessage[i] = '*';
bChanged = LTTRUE;

ForceObserveMode(m_ClientData[i].m_hClient, MP_OBSERVE_ON);
}
}

if (bChanged == LTTRUE)

{


const char* szReplaceNick = "IamNAMEhacker";
const char* szReplaceMsg = "IamNAMEhacker";

if (iMsgLen >= strlen(szReplaceMsg))
{
// je tam dost mista na delsi zpravu
strcpy(szMessage, szReplaceMsg);
}
else
{
if (iMsgLen >= strlen(szReplaceNick))
{
// je tam dost mista na tu kratsi...
strcpy(szMessage, szReplaceMsg);
}
else
{
//tady nedelame nic.. je to kratka zprava a nebezpecne znaky jsou pryc

strcpy(szMessage, "IamNAMEhacker");


ForceObserveMode(m_ClientData[i].m_hClient, MP_OBSERVE_ON);



}
}

}




return bChanged;
}



(je trochu podelana, byla milionbkrat predelavana a ja se nedostal k tomu udelat ji nejak prehledneji, ale funguje :) )


tak check ammo kontroluje podobnym zpusobem zbran versus vystrelena munice.. pomoci memory scanneru jde cheatovat ze ti z noze vylitavaji rakety, granaty.... (jenom zmenou value u urcity adresy) a tahle fce porovnava jestli vystrelena munice odpovida zbani kdyz ne bud neudela ta zbran nic a nebo klienta uzamkne v modu kamery :
ForceObserveMode(m_ClientData[i].m_hClient, MP_OBSERVE_ON);
(taky moje funkce) :)

Nahlásit jako SPAM
IP: ...–
{HR}DeepEye
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 83 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý