- // Ñèãíàòóðà ñíàðÿäà:
- Mem.ReadDWORD(dw);
- if dw <> SHOT_SIGNATURE then // 'SHOT'
- begin
- raise EBinSizeError.Create('g_Weapons_LoadState: Wrong Shot Signature');
- end;
- // Òèï ñíàðÿäà:
- Mem.ReadByte(Shots[i].ShotType);
- // Öåëü:
- Mem.ReadWord(Shots[i].Target);
- // UID ñòðåëÿâøåãî:
- Mem.ReadWord(Shots[i].SpawnerUID);
- // Ðàçìåð ïîëÿ Triggers:
- Mem.ReadDWORD(dw);
- SetLength(Shots[i].Triggers, dw);
- // Òðèããåðû, àêòèâèðîâàííûå âûñòðåëîì:
- for j := 0 to Integer(dw)-1 do
- Mem.ReadDWORD(Shots[i].Triggers[j]);
- // Îáúåêò ïðåäìåòà:
- Obj_LoadState(@Shots[i].Obj, Mem);
- // Êîñòûëèíà åáàíàÿ:
- Mem.ReadByte(Shots[i].Stopped);
-
- // Óñòàíîâêà òåêñòóðû èëè àíèìàöèè:
+ // Ñèãíàòóðà ñíàðÿäà
+ if not utils.checkSign(st, 'SHOT') then raise XStreamError.Create('invalid shot signature');
+ if (utils.readByte(st) <> 0) then raise XStreamError.Create('invalid shot version');
+ // Òèï ñíàðÿäà:
+ Shots[i].ShotType := utils.readByte(st);
+ // Öåëü
+ Shots[i].Target := utils.readWord(st);
+ // UID ñòðåëÿâøåãî
+ Shots[i].SpawnerUID := utils.readWord(st);
+ // Ðàçìåð ïîëÿ Triggers
+ tc := utils.readLongInt(st);
+ if (tc < 0) or (tc > 1024*1024) then raise XStreamError.Create('invalid shot triggers counter');
+ SetLength(Shots[i].Triggers, tc);
+ // Òðèããåðû, àêòèâèðîâàííûå âûñòðåëîì
+ for j := 0 to tc-1 do Shots[i].Triggers[j] := utils.readLongWord(st);
+ // Îáúåêò ïðåäìåòà
+ Obj_LoadState(@Shots[i].Obj, st);
+ // Êîñòûëèíà åáàíàÿ
+ Shots[i].Stopped := utils.readByte(st);
+
+ // Óñòàíîâêà òåêñòóðû èëè àíèìàöèè