Page 1 of 1

Нужен пример. Трейд окно.

Posted: 20.07.2013 7:41
by HeadShot1989
Как правильней организовать цикл? Хочу автоскупщика у плееров скрипт наваять ибо мой сервер не имеет автобаев... Использовал некоторые наработки, найденые на форуме. Почему-то мой мозг отказывается дружить с циклами, можно не кодом, просто пример на словах. Хочу скупать один итем.

Re: Нужен пример. Трейд окно.

Posted: 20.07.2013 12:49
by Vizit0r
на словах - цикл это тоде самое, что для одного захода, только заключенное в while XXX do begin end;

А если серьезно - ТЗ отсутствует.
Подробнее на словах опиши пошагово операции, которые ты хочешь сделать, глядишь и самому понятнее будет (ага, блок-схемы, информатика, 8 класс :))

Re: Нужен пример. Трейд окно.

Posted: 20.07.2013 19:16
by HeadShot1989
:) у нас трэш с информатикой был поэтому :)

Короче в цикл заключаем:

Чар ищет в пределах 2ух тайлов человека по типу,
если нашел, то проверяет есть ли гп в бекпаке,
если нашел, то проверяет не висит ли трейд
если висит, то проверяет кол-во трейдов,
если больше 1, то закрывает остальные кроме нулевого,
проверяет что за итем в трейде,
если нужный мне, то перемещает оплату в свой контейнер трейда,
ставит галку в подтверждении,
ждет 15 сек, проверяет не висит ли этот же самый трейд,
если висит то CancelTrade.

Вот что у меня в текстовике было накидано перед тем как я начал туда код нафигачивать. Стоит ли тут что-то разбивать по процедурам, или в один программ все уместить, проверки по грамотрей может сделать...

Re: Нужен пример. Трейд окно.

Posted: 20.07.2013 20:09
by Vizit0r
ну и нормально расписано. Я правда не понял, чего там закрываем все, кроме именно нулевого, ну да ладно, дело хозяйское, ему виднее.
Теперь давай то же самое переводи в код, а с вопросами или сложными моментами (хотя их тут нет) помогу.

Re: Нужен пример. Трейд окно.

Posted: 25.07.2013 1:34
by HeadShot1989
это всё уже давно в коде, наоборот я переводил в простые слова сидел :lol: Закрываем все кроме нулевого, что бота не завалили ненужными трейдами, и продавали по принципу "В очередь!!! В очередь, *:"&^$% &%@*(!"
Подумываю заключить все это примерно так

Code: Select all

Program BuyGS;
const
*****************
var
*****************
Begin
 while not dead do
    begin
     если в журнале есть строка 'sell GS' то
       begin
        вышеописанные действия;
       end;
     ClearJournal;
    end;
end.
И Еще, где расставить задержки, дабы не нагружать проц, я еще парой клиентов копаю-фармлю и одним сам контролю ПвП-ПвМ обычно. Проц сильный, но загрузить можно что угодно кривым кодом :)
P.S: сам когда пишу вспоминаю твою подпись на форуме и стараюсь придерживаться этого совета :mrgreen:

Re: Нужен пример. Трейд окно.

Posted: 25.07.2013 2:43
by Vizit0r
качественно загрузить проц можно в общем случае только одним действием - циклом без задержки, вида

while XXX do
begin

end;
= 99% загрузки одного ядра.

добавить внутрь хотя бы Wait(30) - и все, проблемы нет.


по поводу трейдов - может тогда наоборот, оставлять не нулевой трейд, а последний?

Re: Нужен пример. Трейд окно.

Posted: 25.07.2013 4:02
by HeadShot1989
как раз таки, кто первый в очереди, с тем и торгует :) тобишь нулевой трейд. у меня проверка на висячий трейд есть, если ты об этом подумал, если висит больше 15 сек то отменяет этот трейд. Как сам скрипт, так много if мне кажется кривостью или это норма

Re: Нужен пример. Трейд окно.

Posted: 25.07.2013 5:50
by Vizit0r
В проверках без if не обойдешься вообще-то, так что нормально.

P.S. много иф - это когда я в каком-то там классе попал на олимпиаду по программированию, хотя знания мои стремились к нулю (но у остальных они нулями и были), и на этой самой олимпиаде из-за банального незнания case на 2х двойных листках нарисовал код где-то в полсотню ифов. Учитель офигел, мягко говоря, когда увидел этот шедевр.

Re: Нужен пример. Трейд окно.

Posted: 26.07.2013 1:01
by HeadShot1989

Code: Select all

Program BuyGS;

const
GoldCoin=$0EED;//тип золота
Gstone=$3198;//тип покупаемого предмета

var
GSInContainer,TransferGP,OppContainer,MyContainer,client:Cardinal;
j:integer;

Begin
while not dead do
	begin  
	wait(100);//ждем фразы sell GS в журнале для дальнейшего действия
	if WaitJournalLine(now,'sell GS',60000)=true then
		begin
		findtype($0190,ground);//ищем по типу чара в пределах FindDistance
		client:=finditem;
		if client <> 0 then
			begin
			if (CountEx(GoldCoin,$0000,backpack)>35000) then
				begin
				uosay('; Добрый день, '+GetName(client)+'! Я покупаю God Stone по 35k');
				wait(1500);
				uosay('; Просто киньте в трейд свои God Stone, у вас есть 20 секунд.');
				wait(20000);
				If IsTrade=true then
					begin
					if TradeCount()>0 then
						begin
						for j:=TradeCount()-1 DownTo 0 do						
						CancelTrade(j);
						checklag(3000);
						end;
					If GetTradeOpponent(0)=client Then
						begin
						OppContainer:=GetTradeContainer(0,2);
						MyContainer:=GetTradeContainer(0,1);
						if (CountEx(Gstone,$0A8C,OppContainer))>0 then
							begin
							checklag(3000);
							uosay('; У вас 15 секунд для подтверждения сделки!');
							GSInContainer:=(CountEx(Gstone,$0A8C,OppContainer));
							TransferGP:=(GSInContainer*35000);
							FindTypeEx(GoldCoin,$0000,backpack,True);
							MoveItem(FindItem,TransferGP,MyContainer,0,0,0);
							wait(15000);
							if (TradeCheck(0,2))=true then
								begin
								ConfirmTrade(0);
								end
								else
								wait(500);
								uosay('Вы не подтвердили сделку вовремя!');
                CancelTrade(0);								
              end;
            end;
          end;
        end;
      end;
      ClearJournal;
    end;
  end;
End.
Что-то не так я накодил походу. Чар реагирует на 'sell GS', но закрывает окно трейда через 20 сек если ему кидаешь итем...
Еще и эта строка '; Добрый день, '+GetName(client)+'! Я покупаю God Stone по 35k' не входит полностью походу, разбить на две?

Re: Нужен пример. Трейд окно.

Posted: 26.07.2013 2:10
by Vizit0r
форматирование у тебя в коде полный писец.

Code: Select all

Program BuyGS;

const
GoldCoin=$0EED;//тип золота
Gstone=$3198;//тип покупаемого предмета

var
GSInContainer,TransferGP,OppContainer,MyContainer:Cardinal;
stime : TDateTime;
j:integer;
             
Begin
while not dead do //ждем фразы sell GS в журнале для дальнейшего действия
  if WaitJournalLine(now,'sell GS',60000) then
  begin
    if (CountEx(GoldCoin,$0000,backpack)>35000) then
    begin
     if TradeCount>0 then
      begin
        for j:=TradeCount-1 DownTo 0 do                  
        CancelTrade(j);
        checklag(3000);
      end;
      uosay('; Добрый день, '+GetName(LineID)+'! Я покупаю God Stone по 35k');
      wait(1500);
      uosay('; Просто киньте в трейд свои God Stone, у вас есть 20 секунд.');
      wait(20000);
      If IsTrade and (GetTradeOpponent(0)=LineID) Then
      begin
        OppContainer:=GetTradeContainer(0,2);
        MyContainer:=GetTradeContainer(0,1);
        if (CountEx(Gstone,$0A8C,OppContainer))>0 then
        begin
          checklag(3000);
          uosay('; У вас 15 секунд для подтверждения сделки!');
          GSInContainer:=(CountEx(Gstone,$0A8C,OppContainer));
          TransferGP:=(GSInContainer*35000);
          FindTypeEx(GoldCoin,$0000,backpack,True);
          MoveItem(FindItem,TransferGP,MyContainer,0,0,0);
          AddToSystemJournal(DateTimeToStr(Now));
          stime := Now;
          repeat 
            wait(100); 
          until TradeCheck(0,2) or (Now > stime + 15/(1440*60));    
          AddToSystemJournal(DateTimeToStr(Now));
          if TradeCheck(0,2) then
            ConfirmTrade(0)
          else
          begin
            wait(500);
            uosay('Вы не подтвердили сделку вовремя!');
            CancelTrade(0);                        
          end;
        end;
      end;
    end
    else
      uosay('Закончились деньги, приходите позже!');
  end
  else
    wait(100); 
End.
немного смущает структура, но мне лень сейчас перелопачивать его, тем более что проверить не могу на шарде.