Czytałem że na stronce ma być w download 1.54 , ale nie ma
Gdzie tak jest napisane?
janczarny napisał/a:
Czy jedynym rozwiązaniem jest hex przy world.dat ?
A hexuj go sobie, hexuj, tylko najpierw otwórz go w Winampie, wtedy dowiesz się, co w nim jest :P
I byłbym zapomniał, najmniejsza zmiana (o ile nie popsuli tego w PL wersji) world.dat spowoduje, że gra się nie włączy.
Jako iż ten post był napisany w Grudniu 06 , Zakładam że ten plik mógł zostać wydany
aczkolwiek nie musiał.
ps napisał/a:
janczarny napisał/a:
Czy jedynym rozwiązaniem jest hex przy world.dat ?
A hexuj go sobie, hexuj, tylko najpierw otwórz go w Winampie, wtedy dowiesz się, co w nim jest :P
I byłbym zapomniał, najmniejsza zmiana (o ile nie popsuli tego w PL wersji) world.dat spowoduje, że gra się nie włączy.
żarty , żartami ^^
w znalazłem odpowiedz na swoje pytanie ^^ .exe gry , albo DevCD ^^ i Visual Studio, (Teoretycznie pytanie zbędne , ale może komuś się przyda)
Jako iż ten post był napisany w Grudniu 06 , Zakładam że ten plik mógł zostać wydany
aczkolwiek nie musiał.
Plik na pewno jest gdzieś w sieci. Potraktowanie Uplinka hex-edytorem byłoby mało rozsądne, nie ma szans upchnąć nowego obiektu do gotowego kodu (można by było co najwyżej zamienić jeden z istniejących, ale komu chciałoby się to robić?). W dodatku Uplink jest tak pro napisany, że bez drobnych poprawek nie skompilujesz go na obecnym VC++. Ale jak się uprzesz, da radę pod nim skompilować.
Może sie przydać: Visual C++ 2008
(Bez bólu natomiast działa w zabytkowym Visual C++ 6.0, ale tego już chyba nigdzie nie ma).
Jako iż ten post był napisany w Grudniu 06 , Zakładam że ten plik mógł zostać wydany
aczkolwiek nie musiał.
Plik na pewno jest gdzieś w sieci. Potraktowanie Uplinka hex-edytorem byłoby mało rozsądne, nie ma szans upchnąć nowego obiektu do gotowego kodu (można by było co najwyżej zamienić jeden z istniejących, ale komu chciałoby się to robić?). W dodatku Uplink jest tak pro napisany, że bez drobnych poprawek nie skompilujesz go na obecnym VC++. Ale jak się uprzesz, da radę pod nim skompilować.
Może sie przydać: Visual C++ 2008
(Bez bólu natomiast działa w zabytkowym Visual C++ 6.0, ale tego już chyba nigdzie nie ma).
Jest to już potwierdzone doświadczalnie: DevCD v1.31 kompiluje się i działa bezproblemowo przy VC++ 2008 Express, najnowsza wersja jest niepotrzebna. Kompilacja i uruchomienie gry w tym środowisku zajęły mi niewiele ponad godzinę wliczając w to znalezienie płyty z grą (co, biorąc pod uwagę ile trzeba było zrobić, i tak jest bardzo długim okresem czasu).
Mam całe najnowsze Visual Studio 2008 SP1 Express Edition.
O ile czegoś nie pominąłem to aby gra skompilowała się trzeba:
- zmienić stare nagłówki na nowe (iostream.h, strstrea.h, fstream.h i chyba jeszcze stdlib.h gdzieś było => iostream, strstream, fstream i cstdlib)
- usunąć IRCa który uniemożliwia później podlinkowanie gry, zostawić z niego sam interfejs (aby później nie zawieszać gry)
- w redshircie wyrzucić to (nie przeszkadza w kompilacji, ale sypie się później):
Kod:
// Set completely unbuffered (we do our own)
setvbuf(input, NULL, _IOFBF, 0);
setvbuf(output, NULL, _IOFBF, 0);
- w ustawieniach linkera przy otwartym pliku z projektu uplink (alt-f7=>configuration=>linker=>input) dodać do ignorowanych biblioteki LIBC.lib, LIBCD.lib, LIBCP.lib
- w ustawieniach preprocesora, też dla projektu uplink (alt-f7=>configuration=>c++=>preprocessor) zmienić początek additional include directories na właściwy folder
- z folderu Lib w solution explorerze wyrzucić irca, glu32.lib i opengl32.lib, dodać glu32.lib i opengl32.lib z folderu %programfiles%\microsoft sdks\windows\v6.0a\lib
- opróżnić plik Resources/resources.rc
- w dos2unix.cpp zamienic funkcje dos2unixbuf::pbackfail(int) i dos2unixbuf::sync(void) na:
Kod:
int dos2unixbuf::pbackfail(int c) { return c; }
Kod:
int dos2unixbuf::sync() { return 0; }
NIE należy zmieniać nic w Tosserze (za wyjątkiem nagłówków), choć kompilator narzeka czasami na rzekome błędy w nim (gra i tak się uda), jest dobry, choć trochę powolny (są lepsze implementacje drzewa z danymi).
NIE należy przejmować się bezsensownymi warningami kompilatora na temat strcpy, strcat i innych funkcji. Pod żadnym pozorem NIE zmieniać ich na wersje z _s w nazwie.
To chyba wszystko, jak po tym dalej masz błędy to pisz. Mogłem o czymś zapomnieć.
Ostatnio zmieniony przez ps 2009-08-24, 21:02, w całości zmieniany 3 razy
imgSmiley->Draw ( smileyXpos, ypos - 7 );
}
}
}
}
void IRCInterface::ConnectDraw ( Button *button, bool highlighted, bool clicked )
{
if ( connected )
button->SetCaption( "Disconnect" );
else
button->SetCaption( "Connect" );
button_draw ( button, highlighted, clicked );
}
void IRCInterface::BackBlackoutDraw ( Button *button, bool highlighted, bool clicked )
{
clear_draw( button->x, button->y, button->width, button->height );
}
void IRCInterface::UserListDraw ( Button *button, bool highlighted, bool clicked )
{
int screenheight = app->GetOptions ()->GetOptionValue ( "graphics_screenheight" );
glScissor ( button->x, screenheight - (button->y + button->height), button->width, button->height );
glEnable ( GL_SCISSOR_TEST );
LocalInterfaceScreen::BackgroundDraw( button, highlighted, clicked );
ScrollBox *scrollBox = ScrollBox::GetScrollBox( "irc_userscroll" );
if ( !scrollBox ) return;
int baseOffset = scrollBox->currentIndex;
int numRows = (button->height - 20) / 17;
if ( connected ) {
int xpos = button->x + 20;
for ( int i = 0; i < numRows; ++i ) {
if ( users.ValidIndex( i + baseOffset ) ) {
int ypos = button->y + 20 + i * 17;
if ( users.GetData(i + baseOffset)->status == 0 )
glColor3f ( 1.0, 1.0, 1.0 );
else
glColor3f ( 1.0, 0.5, 0.5 );
GciDrawText ( xpos, ypos, users.GetData(i + baseOffset)->name );
}
}
}
glDisable ( GL_SCISSOR_TEST );
}
void IRCInterface::ConnectClick ( Button *button )
{
}
void IRCInterface::PostClick ( Button *button )
{
}
void IRCInterface::TextScrollChange ( char *name, int newValue )
{
EclDirtyButton ( "irc_maintext" );
}
void IRCInterface::UserScrollChange ( char *name, int newValue )
{
EclDirtyButton ( "irc_userlist" );
}
void IRCInterface::AddText ( char *user, char *text, float r, float g, float b )
{
UplinkAssert (text);
int screenw = app->GetOptions ()->GetOptionValue ("graphics_screenwidth");
int screenh = app->GetOptions ()->GetOptionValue ("graphics_screenheight");
int mainWidth = screenw * 0.65;
int mainHeight = screenh * 0.8;
LList <char *> *wrapped = wordwraptext( text, mainWidth );
int numLines = wrapped->Size();
for ( int i = 0; i < numLines; ++i ) {
char *theLine = wrapped->GetData(i);
UplinkAssert (theLine);
if ( strlen(theLine) > 1 ) {
UplinkIRCMessage *msg = new UplinkIRCMessage ();
char *thisuser = ( i == 0 ? user : NULL );
msg->Set ( thisuser, theLine, r, g, b );
buffer.PutDataAtEnd( msg );
}
}
delete wrapped;
while ( buffer.ValidIndex( IRCBUFFERSIZE ) ) {
UplinkIRCMessage *msg = buffer.GetData( 0 );
delete msg;
buffer.RemoveData( 0 );
}
ScrollBox *scrollBox = ScrollBox::GetScrollBox( "ircscroller" );
if ( scrollBox ) {
bool viewingNewest = false;
if ( scrollBox->currentIndex == scrollBox->numItems - scrollBox->windowSize )
viewingNewest = true;
scrollBox->SetNumItems( buffer.Size() );
if ( viewingNewest )
scrollBox->SetCurrentIndex( buffer.Size() - scrollBox->windowSize );
}
EclDirtyButton ( "irc_maintext" );
}
void IRCInterface::ResetUsers ()
{
while ( users.ValidIndex(0) ) {
UplinkIRCUser *user = users.GetData(0);
delete user;
users.RemoveData(0);
}
ScrollBox *scrollBox = ScrollBox::GetScrollBox( "irc_userscroll" );
if ( scrollBox ) scrollBox->SetNumItems( users.Size() );
EclDirtyButton ( "irc_userlist" );
}
void IRCInterface::AddUser ( char *name )
{
UplinkIRCUser *userExists = GetUser (name);
if ( userExists ) return;
if ( strlen(name) < 2 ) return;
UplinkIRCUser *user = new UplinkIRCUser ();
if ( name[0] == '@' ) {
user->Set (name+1);
user->status = 1;
}
else
user->Set( name );
bool inserted = false;
char *lowerCaseName = LowerCaseString (name);
for ( int i = 0; i < users.Size(); ++i ) {
UplinkIRCUser *thisUser = users.GetData(i);
UplinkAssert (thisUser);
char *lowerCaseThisUser = LowerCaseString ( thisUser->name );
if ( ( user->status == 1 && thisUser->status == 0 ) ||
(user->status == 1 && thisUser->status == 1 && strcmp ( lowerCaseName, lowerCaseThisUser ) < 0 ) ||
(user->status == 0 && thisUser->status == 0 && strcmp ( lowerCaseName, lowerCaseThisUser ) < 0 ) ) {
users.PutDataAtIndex ( user, i );
inserted = true;
delete [] lowerCaseThisUser;
break;
}
delete [] lowerCaseThisUser;
}
if ( !inserted ) users.PutDataAtEnd ( user );
delete [] lowerCaseName;
ScrollBox *scrollBox = ScrollBox::GetScrollBox( "irc_userscroll" );
if ( scrollBox ) scrollBox->SetNumItems( users.Size() );
EclDirtyButton ( "irc_userlist" );
}
void IRCInterface::RemoveUser ( char *name )
{
for ( int i = 0; i < users.Size(); ++i ) {
UplinkIRCUser *user = users.GetData(i);
UplinkAssert (user);
if ( strcmp ( user->name, name ) == 0 ) {
users.RemoveData( i );
ScrollBox *scrollBox = ScrollBox::GetScrollBox( "irc_userscroll" );
if ( scrollBox ) scrollBox->SetNumItems( users.Size() );
return;
}
}
}
UplinkIRCUser *IRCInterface::GetUser ( char *name )
{
for ( int i = 0; i < users.Size(); ++i ) {
UplinkIRCUser *user = users.GetData(i);
UplinkAssert (user);
if ( strcmp ( user->name, name ) == 0 )
return user;
}
return NULL;
}
UplinkIRCMessage::UplinkIRCMessage ()
{
user = NULL;
text = NULL;
}
UplinkIRCMessage::~UplinkIRCMessage ()
{
if ( user ) delete [] user;
if ( text ) delete [] text;
}
void UplinkIRCMessage::Set ( char *newuser, char *newtext, float r, float g, float b )
{
if ( user ) delete [] user;
user = NULL;
if ( newuser ) {
user = new char [strlen(newuser)+1];
strcpy ( user, newuser );
}
if ( text ) delete [] text;
text = NULL;
if ( newtext ) {
text = new char [strlen(newtext)+1];
strcpy ( text, newtext );
}
red = r;
green = g;
blue = b;
}
UplinkIRCUser::UplinkIRCUser ()
{
name = NULL;
status = 0;
}
UplinkIRCUser::~UplinkIRCUser ()
{
if ( name ) delete [] name;
}
void UplinkIRCUser::Set ( char *newname )
{
}
IRCInterface::IRCInterface()
{
}
IRCInterface::~IRCInterface()
{
}
void IRCInterface::CreateTalkWindow()
{
int screenw = app->GetOptions ()->GetOptionValue ("graphics_screenwidth");
int screenh = app->GetOptions ()->GetOptionValue ("graphics_screenheight");
int mainWidth = screenw * 0.65;
int mainHeight = screenh * 0.8;
EclRegisterButton ( 30, 30, mainWidth - 15, mainHeight, " ", " ", "irc_maintext" );
EclRegisterButtonCallbacks ( "irc_maintext", MainTextDraw, NULL, NULL, NULL );
int numRows = mainHeight / 15;
ScrollBox::CreateScrollBox( "ircscroller",
(30 + mainWidth) - 15, 30, 15, mainHeight,
buffer.Size(), numRows, buffer.Size() - numRows,
TextScrollChange );
EclRegisterButton ( 30, mainHeight + 30, mainWidth - 50, 15, " ", "Enter your text here", "irc_inputbox" );
EclRegisterButtonCallbacks ( "irc_inputbox", textbutton_draw, NULL, button_click, button_highlight );
EclMakeButtonEditable ( "irc_inputbox" );
EclRegisterButton ( (30 + mainWidth) - 50, mainHeight + 30, 50, 15, "Post", "Click to post your message", "irc_postbutton" );
EclRegisterButtonCallback ( "irc_postbutton", PostClick );
}
void IRCInterface::RemoveTalkWindow()
{
EclRemoveButton ( "irc_maintext" );
EclRemoveButton ( "irc_inputbox" );
EclRemoveButton ( "irc_postbutton" );
ScrollBox::RemoveScrollBox( "ircscroller" );
}
bool IRCInterface::ReturnKeyPressed ()
{
PostClick ( NULL );
return true;
}
void IRCInterface::Create ()
{
if ( !IsVisible() ) {
int screenw = app->GetOptions ()->GetOptionValue ("graphics_screenwidth");
int screenh = app->GetOptions ()->GetOptionValue ("graphics_screenheight");
int paneltop = 100.0 * ( (screenw * PANELSIZE) / 188.0 ) + 30;
int panelwidth = screenw * PANELSIZE;
EclRegisterButton ( screenw - panelwidth - 3, paneltop, panelwidth, 15, "INTERNET RELAY CHAT", "Remove the IRC screen", "irc_title" );
int mainWidth = screenw * 0.65;
int mainHeight = screenh * 0.8;
EclRegisterButton ( 0, 30, mainWidth, mainHeight, " ", " ", "irc_backblackout" );
EclRegisterButtonCallbacks ( "irc_backblackout", BackBlackoutDraw, NULL, NULL, NULL );
EclRegisterButton ( screenw - panelwidth - 3, paneltop + 20, panelwidth - 15, 370, "USERS", " ", "irc_userlist" );
EclRegisterButtonCallbacks ( "irc_userlist", UserListDraw, NULL, NULL, NULL );
int numUsers = 350 / 17;
ScrollBox::CreateScrollBox( "irc_userscroll",
screenw - 18, paneltop + 20, 15, 370,
users.Size(), numUsers, 0,
UserScrollChange );
EclRegisterButton ( screenw - panelwidth - 3, paneltop + 400, panelwidth, 15, "CONNECT", "Click to connect/disconnect", "irc_connect" );
EclRegisterButtonCallbacks ( "irc_connect", ConnectDraw, ConnectClick, button_click, button_highlight );
EclRegisterButton ( 30, 150, 100, 15, "Server", "The location of the server to connect to", "irc_servertitle" );
EclRegisterButton ( 30, 170, 100, 15, "Port", "The port to connect on", "irc_porttitle" );
EclRegisterButton ( 30, 190, 100, 15, "Channel", "The name of the channel to join", "irc_channeltitle" );
EclRegisterButton ( 30, 210, 100, 15, "Nickname", "Your nickname", "irc_nicknametitle" );
EclRegisterButton ( 30, 230, 100, 15, "RealName", "Your real name", "irc_fullnametitle" );
EclRegisterButton ( 130, 150, 300, 15, "irc.openprojects.net", "Enter the Server name here", "irc_server" );
EclRegisterButton ( 130, 170, 300, 15, "6667", "Enter the port number here", "irc_port" );
EclRegisterButton ( 130, 190, 300, 15, "#uplink", "Enter the channel name here", "irc_channel" );
EclRegisterButton ( 130, 210, 300, 15, "My Nickname", "Enter your nickname here", "irc_nickname" );
EclRegisterButton ( 130, 230, 300, 15, "My Real Name", "Enter your real name here", "irc_fullname" );
Gdzie?
BTW: Uplink nie skompiluje się jeśli dasz F7 lub klikniesz Build Solution, musisz używać "Build Uplink" albo "Start Debugging" (F5).
(jak ilość błędów spadnie do kilkunastu, wklejaj po jednym razem z okolicą miejsca, gdzie występuje, będzie mi wtedy łatwiej sprawdzić, czemu tak się dzieje)
Jak by ktoś reflektował na update EN w wersji 1.55 to mam go w formie instalatorka :) Nie mniej jednak jestem pełen nadziei iż powstanie ten path PL :) tylko myślę ze trzeba by się uśmiechnąć o pomoc do takich osób jak 'ps'
_________________ Czy jesteś kamieniem, czy ziarenkiem piasku - w wodzie utoniesz tak samo.
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Nie możesz ściągać załączników na tym forum