Показать сообщение отдельно
Старый 05.07.2008, 14:32   #447
Новичок
 
Аватар для raid
 
Регистрация: 01.07.2008
Адрес: Пермь
Сообщений: 21
Сказал Спасибо: 0
Имеет 37 спасибок в 10 сообщенях
raid пока неопределено
По умолчанию

Map 1.0 Final
Форма: на ней перс по центру, показываеться куда направлена голова, и рядом лежащие айтемы и их иды. Для поисковых ивентов...
При клике по форме перс в игре бежит в эту точку (Z не меняеться).
Лог(прописываеться Drop(кинули)/Spawn(лежало)/Delete(удалили)/Move to(при клике на мапе, x/y относительные), прописываеться айди и название вещи из ItemsID.ini).
delphi Код:
const  Name='Mamy';  max=100;  size=320; //размер  ratio=20; // zoom: 100% - size/16; 200% - size/16/2 // настройки отображения внизу. var  Form: TForm;  Memo: TMemo;  ItemBase: TStrings;  ItemsPlace: array[0..max,0..1] of integer;  ItemsID: array[0..max,0..1] of integer;  ItemsName: array[0..max] of string;  MyX,MyY,MyZ,MyH,ii: integer; procedure Init; var i: integer; begin   Form:=TForm.Create(nil); //  //default postion //  Form.Position:=poDesigned; //  Form.Top:=0; //  Form.Left:=0;   Form.Caption:='Map by raid | '+Name;   Form.BorderStyle:=bsToolWindow;   Form.ClientWidth:=size;   Form.ClientHeight:=2*size;   Form.OnMouseDown:=@FormMouseDown;   Form.Show;   Memo:=TMemo.Create(Form);   Memo.Parent:=Form;   Memo.Left:=0;   Memo.Top:=size;   Memo.Width:=size;   Memo.Height:=size;   Memo.ReadOnly:=True;   Memo.ScrollBars:=ssVertical;   Memo.Visible:=True;   ItemBase:=TStringList.Create;   ItemBase.LoadFromFile('ItemsID.ini');   Log('ItemBase='+inttostr(ItemBase.Count));   for i:=0 to max do begin    ItemsPlace[i,0]:=0;    ItemsPlace[i,1]:=0;    ItemsID[i,0]:=0;    ItemsID[i,1]:=0;    ItemsName[i]:='';   end;   ii:=0;   ShowMap; end; procedure Free; var i:integer; begin   Memo.Free;   ItemBase.Free;   Form.Free;   MyX:=0;   MyY:=0;   MyZ:=0;   MyH:=0;   ii:=0;   for i:=0 to max do begin    ItemsPlace[i,0]:=0;    ItemsPlace[i,1]:=0;    ItemsID[i,0]:=0;    ItemsID[i,1]:=0;    ItemsName[i]:='';   end; end; procedure FormMouseDown(Sender: TObject; Button: TMouseButton;   Shift: TShiftState; X, Y: Integer); begin   x:=MyX+(x-size div 2)*ratio;   y:=MyY+(y-size div 2)*ratio;   buf:=#$01;   WriteD(x);   WriteD(y);   WriteD(MyZ);   WriteD(MyX);   WriteD(MyY);   WriteD(MyZ);   WriteD(1);   SendToServerEx(Name);   Log('Move to: x='+inttostr(x)+', y='+inttostr(y)); end; procedure Dot(x,y:integer;text:string); begin  Form.Canvas.Ellipse(x-1,y-1,x+2,y+2);  Form.Canvas.TextOut(x+2,y+2,text); end; procedure ShowMap; var i,x,y,x1,y1,p:integer; begin  Form.Caption:='Map by raid | '+Name+' | Items: '+inttostr(ii);  Form.Canvas.Rectangle(0,0,size,size);  p:=MyH-15;  x:=round((size div 2)*(cos(p*pi/180)+1));  y:=round((size div 2)*(1-sin(p*pi/180)));  p:=MyH+15;  x1:=round((size div 2)*(cos(p*pi/180)+1));  y1:=round((size div 2)*(1-sin(p*pi/180)));  Form.Canvas.MoveTo(size div 2,size div 2);  Form.Canvas.LineTo(x,y);  Form.Canvas.LineTo(x1,y1);  Form.Canvas.LineTo(size div 2,size div 2);  Dot(size div 2,size div 2,Name);  x:=MyX div ratio-size div 2;  y:=MyY div ratio-size div 2;  for i:=0 to ii-1 do   Dot(ItemsPlace[i,0]-x,ItemsPlace[i,1]-y,ItemsName[i]); end; procedure Log(text:string;const name:string=''); begin  if name<>'' then   Memo.Lines.Add(TimeToStr(Time)+': '+text+' '+name)  else   Memo.Lines.Add(TimeToStr(Time)+': '+text); end; procedure SetMy(x,y,z,h:integer); begin  MyH:=360-(h div 190);  MyX:=x;  MyY:=y;  MyZ:=z;  ShowMap; end; procedure AddItem(x,y,oid,id:integer;const name:string=''); var i:integer; begin  if ii=max then begin Log('Warning: max items!');exit;end;  for i:=0 to ii-1 do   if ItemsID[i,0]=oid then    exit;  if name='' then begin   i:=ItemBase.IndexOfName(inttostr(id));   if i>-1 then    name:=ItemBase.Strings[i]   else    name:=inttostr(id);  end;  ItemsPlace[ii,0]:=x div ratio;  ItemsPlace[ii,1]:=y div ratio;  ItemsID[ii,0]:=oid;  ItemsID[ii,1]:=id;  ItemsName[ii]:=name;  inc(ii);  case pck[1] of   #$0B: Log('Spawn',name);   #$0C: Log('Drop',name);   #$03: Log('Char',name);   #$16: Log('NPC',name);  end;  ShowMap; end; procedure DelItem(oid:integer); var i,k:integer; begin  k:=-1;  for i:=0 to ii-1 do   if ItemsID[i,0]=oid then    k:=i; if k>-1 then begin  Log('Delete',ItemsName[k]);  for i:=k to ii-2 do begin   ItemsPlace[i,0]:=ItemsPlace[i+1,0];   ItemsPlace[i,1]:=ItemsPlace[i+1,1];   ItemsID[i,0]:=ItemsID[i+1,0];   ItemsID[i,1]:=ItemsID[i+1,1];   ItemsName[i]:=ItemsName[i+1];  end;  ItemsPlace[ii,0]:=0;  ItemsPlace[ii,1]:=0;  ItemsID[ii,0]:=0;  ItemsID[ii,1]:=0;  ItemsName[ii]:='';  dec(ii);  ShowMap; end; end; begin   if (ConnectName=Name) and FromClient then    if (pck[1]=#$48) then     SetMy(ReadD(2),ReadD(6),ReadD(10),ReadD(14));   if (ConnectName=Name) and FromClient and (pck[1]=#$46) then begin    for ii:=0 to max do begin     ItemsPlace[ii,0]:=0;     ItemsPlace[ii,1]:=0;     ItemsID[ii,0]:=0;     ItemsID[ii,1]:=0;     ItemsName[ii]:='';    end;    ii:=0;    Log('Delete all items');   end;   if (ConnectName=Name) and FromServer then case pck[1] of //********************************************************** //Комментируем не нужные пакеты //********************************************************** //03=CharInfo     #$03: AddItem(ReadD(2),ReadD(6),ReadD(18),0,ReadS(22)); //16=NpcInfo     #$16: AddItem(ReadD(14),ReadD(18),ReadD(2),ReadD(6),ReadS(123)); //0B=SpawnItem     #$0B: AddItem(ReadD(10),ReadD(14),ReadD(2),ReadD(6)); //0C=DropItem     #$0C: AddItem(ReadD(14),ReadD(18),ReadD(6),ReadD(10)); //********************************************************** //**********************************************************     #$04: SetMy(ReadD(2),ReadD(6),ReadD(10),ReadD(14));     #$12: DelItem(ReadD(2));   end; end.

Maybe Cooming Soon: Map 2.0 Dll Edition (Beta)
__________________
Emo-chan style.

Последний раз редактировалось raid, 08.07.2008 в 11:29.
raid вне форума   Ответить с цитированием
За это сообщение raid нажился 6 спасибками от: