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..
Fórum › C / C++
Nacitani testu z TXT souboru - souborovy system..
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/
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.
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
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;
}
}
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....!
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..
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
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 :)
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 ?
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) :)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Úprava kódu - načítání z txt souboru — založil Katy
Program načítání ze souboru txt do proměné — založil Radek
Úprava kódu - načítání z txt souboru — založil Katy
Načítání TXT — založil lib0r
Načítání slov z .txt — založil Crassty
Moderátoři diskuze