Huhu zusammen,
ich habe vor einigen Tagen bei mir den CH-Switcher nach folgendem Tut eingebaut. Bitte melden Sie sich an, um diesen Link zu sehen.
Dieser funktioniert nur leider nicht.
Irgendwas habe ich wohl falsch gemacht, nur finde ich die entsprechende Stelle nicht.
Vielleicht kann mir da jmd. von euch kurz auf die Sprünge helfen.
Momentan ist es so, dass ich mich ingame einlogge, über meine Sidebar (die sonst super funktioniert), den CH Switcher aufrufe und dort dann den Channel auswähle.
Klicke ich hier dann auf "Wechseln", so dauert es etwa 5 sec und ich bin wieder in der Channel auswahl - sprich beim Login.
Dies geschieht beim Wechseln von CH1 auf CH2, wie auch beim Wechseln von CH2 auf CH1.
Folgendes steht dazu Serverside in den Logs (Clientside ist nix drin):
Bei CH1 in CH2 (CH2 zu CH1 ist das gleiche, nur halt anders rund):
CH1:
- Feb 12 17:15:21 :: SYSTEM: new connection from [178.9.201.180] fd: 29 handshake 3122000481 output input_len 0, ptr 0x29d26780
- Feb 12 17:15:22 :: SYSTEM: closing socket. DESC #29
- Feb 12 17:15:22 :: WAEGU move to 62952 169948 (far)
- Feb 12 17:15:23 :: WAEGU move to 61697 168501 (far)
- Feb 12 17:15:23 :: COMMAND: [SA]xJummox: channel
- Feb 12 17:15:24 :: DISCONNECT: [SA]xJummox (DESC::~DESC)
- Feb 12 17:15:24 :: SAVE: [SA]xJummox 63270x176863
- Feb 12 17:15:24 :: QUEST clear timer 0
- Feb 12 17:15:24 :: SYSTEM: closing socket. DESC #27
- Feb 12 17:15:24 :: WAEGU move to 61764 168270 (far)
- Feb 12 17:15:27 :: SYSTEM: new connection from [178.9.201.180] fd: 27 handshake 3155684089 output input_len 0, ptr 0x29d21380
- Feb 12 17:15:27 :: SYSTEM: closing socket. DESC #27
CH2:
Ich habe zwei Channel und die Standard Kerne von Fliege (Kern1-3 + Reiche).
Diese haben die folgenden Ports (so habe ich sie in der char.cpp stehen):
Hier auch nochmal die komplette Funktion ChannelSwitch:
- void CHARACTER::ChannelSwitch(int new_ch){
- long lAddr;
- long lMapIndex;
- WORD wPort;
- long x = this->GetX();
- long y = this->GetY();
- if (!CMapLocation::instance().Get(x, y, lMapIndex, lAddr, wPort))
- {
- sys_err("cannot find map location index %d x %d y %d name %s", lMapIndex, x, y, GetName());
- return;
- }
- if(lMapIndex >= 10000){
- return;
- }
- std::map<WORD, int>micha;
- //for(int i = 0; i < 4; i++){ //replace with maximum channels -1 actual 1300x - 1330x
- // for(int i2 = 2; i2 < 9; i2++){ //replace with your core values actual 13x02 - 13x08
- // micha[13*1000 + i*100 + i2] = i+1;
- // }
- //}
- micha[13001] = 1;
- micha[13031] = 1;
- micha[13041] = 1;
- micha[13051] = 1;
- micha[15001] = 2;
- micha[15031] = 2;
- micha[15041] = 2;
- micha[15051] = 2;
- int chan;
- if(micha.find(wPort) != micha.end()){
- chan = micha[wPort];
- }else{return;}
- Stop();
- Save();
- if(GetSectree()){
- GetSectree()->RemoveEntity(this);
- ViewCleanup();
- EncodeRemovePacket(this);
- }
- TPacketGCWarp p;
- p.bHeader = HEADER_GC_WARP;
- p.lX = x;
- p.lY = y;
- p.lAddr = lAddr;
- p.wPort = (wPort - 100*(chan-1) + 100*(new_ch-1));
- GetDesc()->Packet(&p, sizeof(TPacketGCWarp));
- }
Die Ports sind in jedem Fall korrekt. Ich habe sie nun einige Male geprüft.
Um einen Fehler in der Schleife auszuschließen, habe ich es erstmal direkt mit den Ports und der unschönen Variante probiert.
Funktion do_channel_switch in cmd_general.cpp:
Die uiChannel.py habe ich hochgeladen, da sie sonst zu groß wäre für diesen Beitrag. Bitte melden Sie sich an, um diesen Link zu sehen.
Ich hoffe, ihr könnt mir hier noch Anregungen für einen Lösungsansatz geben. Ich weiß momentan nicht weiter.
Habe das System auch schon 2x komplett aus- und wieder eingebaut.
lg Jummox