Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7 
	Нужен пример. Трейд окно.
- 
				HeadShot1989
- Neophyte 
- Posts: 13
- Joined: 11.07.2013 6:04
Нужен пример. Трейд окно.
Как правильней организовать цикл? Хочу автоскупщика у плееров скрипт наваять ибо мой сервер не имеет автобаев... Использовал некоторые наработки, найденые на форуме. Почему-то мой мозг отказывается дружить с циклами, можно не кодом, просто пример на словах. Хочу скупать один итем.
			
			
									
									
						Re: Нужен пример. Трейд окно.
на словах - цикл это тоде самое, что для одного захода, только заключенное в while XXX do begin end;
А если серьезно - ТЗ отсутствует.
Подробнее на словах опиши пошагово операции, которые ты хочешь сделать, глядишь и самому понятнее будет (ага, блок-схемы, информатика, 8 класс )
)
			
			
									
									А если серьезно - ТЗ отсутствует.
Подробнее на словах опиши пошагово операции, которые ты хочешь сделать, глядишь и самому понятнее будет (ага, блок-схемы, информатика, 8 класс
 )
)"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
						- 
				HeadShot1989
- Neophyte 
- Posts: 13
- Joined: 11.07.2013 6:04
Re: Нужен пример. Трейд окно.
 у нас трэш с информатикой был поэтому
 у нас трэш с информатикой был поэтому 
Короче в цикл заключаем:
Чар ищет в пределах 2ух тайлов человека по типу,
если нашел, то проверяет есть ли гп в бекпаке,
если нашел, то проверяет не висит ли трейд
если висит, то проверяет кол-во трейдов,
если больше 1, то закрывает остальные кроме нулевого,
проверяет что за итем в трейде,
если нужный мне, то перемещает оплату в свой контейнер трейда,
ставит галку в подтверждении,
ждет 15 сек, проверяет не висит ли этот же самый трейд,
если висит то CancelTrade.
Вот что у меня в текстовике было накидано перед тем как я начал туда код нафигачивать. Стоит ли тут что-то разбивать по процедурам, или в один программ все уместить, проверки по грамотрей может сделать...
Re: Нужен пример. Трейд окно.
ну и нормально расписано. Я правда не понял, чего там закрываем все, кроме именно нулевого, ну да ладно, дело хозяйское, ему виднее.
Теперь давай то же самое переводи в код, а с вопросами или сложными моментами (хотя их тут нет) помогу.
			
			
									
									Теперь давай то же самое переводи в код, а с вопросами или сложными моментами (хотя их тут нет) помогу.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
						- 
				HeadShot1989
- Neophyte 
- Posts: 13
- Joined: 11.07.2013 6:04
Re: Нужен пример. Трейд окно.
это всё уже давно в коде, наоборот я переводил в простые слова сидел  Закрываем все кроме нулевого, что бота не завалили ненужными трейдами, и продавали по принципу "В очередь!!! В очередь, *:"&^$%  &%@*(!"
 Закрываем все кроме нулевого, что бота не завалили ненужными трейдами, и продавали по принципу "В очередь!!! В очередь, *:"&^$%  &%@*(!"
Подумываю заключить все это примерно так
И Еще, где расставить задержки, дабы не нагружать проц, я еще парой клиентов копаю-фармлю и одним сам контролю ПвП-ПвМ обычно. Проц сильный, но загрузить можно что угодно кривым кодом 
P.S: сам когда пишу вспоминаю твою подпись на форуме и стараюсь придерживаться этого совета
			
			
									
									
						 Закрываем все кроме нулевого, что бота не завалили ненужными трейдами, и продавали по принципу "В очередь!!! В очередь, *:"&^$%  &%@*(!"
 Закрываем все кроме нулевого, что бота не завалили ненужными трейдами, и продавали по принципу "В очередь!!! В очередь, *:"&^$%  &%@*(!"Подумываю заключить все это примерно так
Code: Select all
Program BuyGS;
const
*****************
var
*****************
Begin
 while not dead do
    begin
     если в журнале есть строка 'sell GS' то
       begin
        вышеописанные действия;
       end;
     ClearJournal;
    end;
end.
P.S: сам когда пишу вспоминаю твою подпись на форуме и стараюсь придерживаться этого совета

Re: Нужен пример. Трейд окно.
качественно загрузить проц можно в общем случае только одним действием - циклом без задержки, вида
while XXX do
begin
end;
= 99% загрузки одного ядра.
добавить внутрь хотя бы Wait(30) - и все, проблемы нет.
по поводу трейдов - может тогда наоборот, оставлять не нулевой трейд, а последний?
			
			
									
									while XXX do
begin
end;
= 99% загрузки одного ядра.
добавить внутрь хотя бы Wait(30) - и все, проблемы нет.
по поводу трейдов - может тогда наоборот, оставлять не нулевой трейд, а последний?
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
						- 
				HeadShot1989
- Neophyte 
- Posts: 13
- Joined: 11.07.2013 6:04
Re: Нужен пример. Трейд окно.
как раз таки, кто первый в очереди, с тем и торгует  тобишь нулевой трейд. у меня проверка на висячий трейд есть, если ты об этом подумал, если висит больше 15 сек то отменяет этот трейд. Как сам скрипт, так много if мне кажется кривостью или это норма
 тобишь нулевой трейд. у меня проверка на висячий трейд есть, если ты об этом подумал, если висит больше 15 сек то отменяет этот трейд. Как сам скрипт, так много if мне кажется кривостью или это норма
			
			
									
									
						 тобишь нулевой трейд. у меня проверка на висячий трейд есть, если ты об этом подумал, если висит больше 15 сек то отменяет этот трейд. Как сам скрипт, так много if мне кажется кривостью или это норма
 тобишь нулевой трейд. у меня проверка на висячий трейд есть, если ты об этом подумал, если висит больше 15 сек то отменяет этот трейд. Как сам скрипт, так много if мне кажется кривостью или это нормаRe: Нужен пример. Трейд окно.
В проверках без if не обойдешься вообще-то, так что нормально.
P.S. много иф - это когда я в каком-то там классе попал на олимпиаду по программированию, хотя знания мои стремились к нулю (но у остальных они нулями и были), и на этой самой олимпиаде из-за банального незнания case на 2х двойных листках нарисовал код где-то в полсотню ифов. Учитель офигел, мягко говоря, когда увидел этот шедевр.
			
			
									
									P.S. много иф - это когда я в каком-то там классе попал на олимпиаду по программированию, хотя знания мои стремились к нулю (но у остальных они нулями и были), и на этой самой олимпиаде из-за банального незнания case на 2х двойных листках нарисовал код где-то в полсотню ифов. Учитель офигел, мягко говоря, когда увидел этот шедевр.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
						- 
				HeadShot1989
- Neophyte 
- Posts: 13
- Joined: 11.07.2013 6:04
Re: Нужен пример. Трейд окно.
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.Еще и эта строка '; Добрый день, '+GetName(client)+'! Я покупаю God Stone по 35k' не входит полностью походу, разбить на две?
Re: Нужен пример. Трейд окно.
форматирование у тебя в коде полный писец.
немного смущает структура, но мне лень сейчас перелопачивать его, тем более что проверить не могу на шарде.
			
			
									
									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."Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
						
