Re: Работа над Goddess of Destruction (part 5)
Кто может скинуть рабочие пакеть UserInfo и CharInfo?
|
Re: Работа над Goddess of Destruction (part 5)
Подскажите пожалуйста, какой пакетик отвечает за то, что когда персонаж получает 4 профессию он подлетает вверх.
|
Re: Работа над Goddess of Destruction (part 5)
обычный пакет использования социалки
|
Re: Работа над Goddess of Destruction (part 5)
Цитата:
|
Re: Работа над Goddess of Destruction (part 5)
Ребята может кто дать ссылку на папку system с devmode для LineageII Goddess of Destruction - Epeisodion
буду благодарен! |
Re: Работа над Goddess of Destruction (part 5)
Пакет ExUserInfo. Разбирал "на глаз", анализируя трафик, поэтому мог где-нибудь ошибиться. Если заполните пробелы, буду благодарен.
procedure TGameStream.ExUserInfoPacket(Packet: TGamePacket); var I, Flags, Size: Integer; Clan: TClan; function ReadBlockSize(Fixed: Integer = 0): Integer; begin Result := Packet.ReadH; if (Fixed > 0) and (Result <> Fixed) then raise EBadPacket.Create('Invalid block size!'); end; begin with Packet do begin Player.ObjectId := ReadD; ReadH; // Size ReadH; ReadC; Flags := ReadD; if ((Flags shr 15) and 1) = 1 then begin ReadD; end; if ((Flags shr 14) and 1) = 1 then // 12, 14? begin ReadBlockSize; Player.Name := ReadS2; ReadC; Player.Race := ReadC; Player.Sex := ReadC; Player.BaseClassId := ReadD; Player.ClassId := ReadD; Player.Level := ReadC; end; if ((Flags shr 13) and 1) = 1 then begin ReadBlockSize(14); Player.Str := ReadH; Player.Dex := ReadH; Player.Con := ReadH; Player.Int := ReadH; Player.Wit := ReadH; Player.Men := ReadH; end; if ((Flags shr 12) and 1) = 1 then // 12, 14? begin ReadBlockSize(14); Player.MaxHP := ReadD; Player.MaxMP := ReadD; Player.MaxCP := ReadD; end; if ((Flags shr 11) and 1) = 1 then begin ReadBlockSize(38); Player.HP := ReadD; Player.MP := ReadD; Player.CP := ReadD; Player.SP := ReadQ; Player.Exp := ReadQ; Player.ExpProgress := ReadF; end; if ((Flags shr 10) and 1) = 1 then begin ReadBlockSize(3); ReadC; end; if ((Flags shr 9) and 1) = 1 then // ? begin ReadBlockSize(15); Skip(13); end; if ((Flags shr 8) and 1) = 1 then begin ReadBlockSize(5); ReadC; Player.PrivateStoreType := ReadC; ReadC; end; if ((Flags shr 23) and 1) = 1 then begin ReadBlockSize(56); ReadH; Player.PAtk := ReadD; Player.PAtkSpd := ReadD; Player.PDef := ReadD; Player.EvasionRate := ReadD; Player.Accuracy := ReadD; Player.CriticalHit := ReadD; Player.MAtk := ReadD; Player.MAtkSpd := ReadD; Player.PAtkSpd := ReadD; Player.MAccuracy := ReadD; Player.MDef := ReadD; Player.MEvasionRate := ReadD; Player.MCriticalHit := ReadD; end; if ((Flags shr 22) and 1) = 1 then // 17 or 22 begin ReadBlockSize(14); Player.Elements.Fire := ReadH; Player.Elements.Water := ReadH; Player.Elements.Wind := ReadH; Player.Elements.Earth := ReadH; Player.Elements.Holy := ReadH; Player.Elements.Dark := ReadH; end; if ((Flags shr 21) and 1) = 1 then begin ReadBlockSize(18); Player.Pos.X := ReadD; Player.Pos.Y := ReadD; Player.Pos.Z := ReadD; ReadD; end; if ((Flags shr 20) and 1) = 1 then // ? begin ReadBlockSize(18); for I := 1 to 4 do begin ReadH; // Run Speed ReadH; // Walk Speed end; end; if ((Flags shr 19) and 1) = 1 then begin ReadBlockSize(18); ReadF; ReadF; end; if ((Flags shr 18) and 1) = 1 then // ? begin ReadBlockSize(18); ReadF; ReadF; end; if ((Flags shr 17) and 1) = 1 then // 17 or 22 begin ReadBlockSize(5); Player.Elements.AttackType := ReadC; Player.Elements.AttackPower := ReadH; end; if ((Flags shr 16) and 1) = 1 then begin ReadBlockSize; Player.Title := ReadS2; ReadH; // Subdivision Player.Clan.Id := ReadD; ReadD; Player.Clan.CrestId := ReadD; ReadD; ReadC; Player.Clan.AllyId :=ReadD; Player.Clan.AllyCrestId := ReadD; ReadC; // PartyRoom end; if ((Flags shr 31) and 1) = 1 then begin ReadBlockSize(22); Skip(12); Player.PvP := ReadD; Player.Recomendations := ReadH; ReadH; end; if ((Flags shr 30) and 1) = 1 then // ? begin Size := ReadBlockSize; Skip(Size - 2); end; if ((Flags shr 29) and 1) = 1 then // ? begin Size := ReadBlockSize; Skip(Size - 2); end; if ((Flags shr 28) and 1) = 1 then begin ReadBlockSize(4); ReadC; Player.IsStanding := ReadBoolC; end; if ((Flags shr 27) and 1) = 1 then // ? begin ReadBlockSize(10); Player.NameColor := ReadD; Player.TitleColor := ReadD; end; if ((Flags shr 26) and 1) = 1 then // ? begin Size := ReadBlockSize; Skip(Size - 2); end; if ((Flags shr 25) and 1) = 1 then // ? begin Size := ReadBlockSize; Skip(Size - 2); end; EndOfPacket; end; ... end; |
Re: Работа над Goddess of Destruction (part 5)
Кто может поделится рабочим shuttle_data ?
|
Re: Работа над Goddess of Destruction (part 5)
remove this post.
|
Re: Работа над Goddess of Destruction (part 5)
Цитата:
Добавлено через 3 минуты ExNPCInfo пока так: procedure TGameStream.ExNPCInfoPacket(Packet: TGamePacket); var I, Count, Flags: Integer; NPC: TNPC; Clan: TClan; begin with Packet do begin NPC.ObjectId := ReadD; NPCs.Get(NPC.ObjectId, NPC); ReadC; // Packet Type (0, 1, 2) ReadH; // $25 ReadC; // $ED or $60 Flags := ReadD; ReadC; NPC.IsAttackable := ReadBoolC; ReadH; NPC.Name := ReadS; NPC.Title := ReadS; ReadH; // Data Size if ((Flags shr 27) and 1) = 1 then begin NPC.ClassId := ReadD - 1000000; NPC.Pos.X := ReadD; NPC.Pos.Y := ReadD; NPC.Pos.Z := ReadD; NPC.Heading := ReadD; NPC.MAtkSpd := ReadD; NPC.PAtkSpd := ReadD; ReadH; ReadH; ReadH; ReadH; end; if ((Flags shr 6) and 1) = 1 then begin ReadD; ReadD; ReadD; end; if ((Flags shr 27) and 1) = 1 then begin NPC.VisibleName := ReadBoolC; NPC.IsRunning := ReadBoolC; NPC.IsInCombat := ReadBoolC; NPC.IsAlikeDead := ReadBoolC; NPC.Invisible := ReadBoolC; Skip(6); NPC.CurHP := ReadD; NPC.MaxHP := ReadD; ReadC; Count := ReadH; for I := 1 to Count do ReadH; end; end; |
Re: Работа над Goddess of Destruction (part 5)
Цитата:
п.с. Цитата:
|
Текущее время: 20:46. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot