Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7
Нужен пример. Трейд окно.
-
- Neophyte
- Posts: 13
- Joined: 11.07.2013 6:04
Нужен пример. Трейд окно.
Как правильней организовать цикл? Хочу автоскупщика у плееров скрипт наваять ибо мой сервер не имеет автобаев... Использовал некоторые наработки, найденые на форуме. Почему-то мой мозг отказывается дружить с циклами, можно не кодом, просто пример на словах. Хочу скупать один итем.
Re: Нужен пример. Трейд окно.
на словах - цикл это тоде самое, что для одного захода, только заключенное в while XXX do begin end;
А если серьезно - ТЗ отсутствует.
Подробнее на словах опиши пошагово операции, которые ты хочешь сделать, глядишь и самому понятнее будет (ага, блок-схемы, информатика, 8 класс
)
А если серьезно - ТЗ отсутствует.
Подробнее на словах опиши пошагово операции, которые ты хочешь сделать, глядишь и самому понятнее будет (ага, блок-схемы, информатика, 8 класс

"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
-
- Neophyte
- Posts: 13
- Joined: 11.07.2013 6:04
Re: Нужен пример. Трейд окно.


Короче в цикл заключаем:
Чар ищет в пределах 2ух тайлов человека по типу,
если нашел, то проверяет есть ли гп в бекпаке,
если нашел, то проверяет не висит ли трейд
если висит, то проверяет кол-во трейдов,
если больше 1, то закрывает остальные кроме нулевого,
проверяет что за итем в трейде,
если нужный мне, то перемещает оплату в свой контейнер трейда,
ставит галку в подтверждении,
ждет 15 сек, проверяет не висит ли этот же самый трейд,
если висит то CancelTrade.
Вот что у меня в текстовике было накидано перед тем как я начал туда код нафигачивать. Стоит ли тут что-то разбивать по процедурам, или в один программ все уместить, проверки по грамотрей может сделать...
Re: Нужен пример. Трейд окно.
ну и нормально расписано. Я правда не понял, чего там закрываем все, кроме именно нулевого, ну да ладно, дело хозяйское, ему виднее.
Теперь давай то же самое переводи в код, а с вопросами или сложными моментами (хотя их тут нет) помогу.
Теперь давай то же самое переводи в код, а с вопросами или сложными моментами (хотя их тут нет) помогу.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
-
- 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) - и все, проблемы нет.
по поводу трейдов - может тогда наоборот, оставлять не нулевой трейд, а последний?
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
-
- Neophyte
- Posts: 13
- Joined: 11.07.2013 6:04
Re: Нужен пример. Трейд окно.
как раз таки, кто первый в очереди, с тем и торгует
тобишь нулевой трейд. у меня проверка на висячий трейд есть, если ты об этом подумал, если висит больше 15 сек то отменяет этот трейд. Как сам скрипт, так много if мне кажется кривостью или это норма

Re: Нужен пример. Трейд окно.
В проверках без if не обойдешься вообще-то, так что нормально.
P.S. много иф - это когда я в каком-то там классе попал на олимпиаду по программированию, хотя знания мои стремились к нулю (но у остальных они нулями и были), и на этой самой олимпиаде из-за банального незнания case на 2х двойных листках нарисовал код где-то в полсотню ифов. Учитель офигел, мягко говоря, когда увидел этот шедевр.
P.S. много иф - это когда я в каком-то там классе попал на олимпиаду по программированию, хотя знания мои стремились к нулю (но у остальных они нулями и были), и на этой самой олимпиаде из-за банального незнания case на 2х двойных листках нарисовал код где-то в полсотню ифов. Учитель офигел, мягко говоря, когда увидел этот шедевр.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
-
- 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.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".