[疑問]關於商人物語要求所(req-s)有點不明白

Webgame遊戲架設上的問題與設定,相關技術討論。

版主: Mr.Simon, 涅魂, 小剎, BSM

s1104308
 
文章: 1
註冊時間: 2015-11-07 7:28 pm
性別: 男生

[疑問]關於商人物語要求所(req-s)有點不明白

文章s1104308 » 2015-11-07 7:35 pm

req-s.cgi裏面的東西都懂了,基本就只差這一個副程式WriteAuc()。
有人可以告訴我以下WriteAuc()是用來做什麼的嘛? :oops: :roll:

Lock();
DataRead();
CheckUserPass();
RequireFile('inc-req.cgi');

$disp.="<BIG>●要求所</BIG><br><br>";

my $functionname=$Q{mode};
OutError("bad request") if !defined(&$functionname);
&$functionname;

$disp.="<br><br>".$TBT.$TRT.$TD.GetTagImgJob($DT->{job},$DT->{icon});
$disp.=$TD.GetMenuTag('stock', '[倉庫]');
$disp.=GetMenuTag('req','[看要求]');
$disp.=$TRE.$TBE;

WriteAuc();
DataWrite();
DataCommitOrAbort();
UnLock();
OutSkin();
1;


sub new
{
my ($numrate,$prrate);
$itemno=$Q{it};
$num=CheckCount($Q{num},0,0,$MAX_MONEY);
$prn=$Q{prn};
$pr=CheckCount($Q{pr},0,0,$MAX_MONEY);
$pr=$pr * $num if ($Q{unit})&&($prn < 0);
$num=$num * $pr if ($Q{unit})&&($itemno < 0);
OutError($AucImg.'沒有輸入要求品的數量和價格。') if ($pr < 1) ;
OutError($AucImg.'沒有輸入報酬品的數量和價格。') if ($num < 1) ;
if ($itemno > 0) {
OutError($AucImg.'你的倉庫根本不足!') if ($DT->{item}[$itemno-1] < $num) ;
OutError($AucImg.'不可列出太多物品。') if ($ITEM[$itemno]->{flag}=~/r/) ; # r 依?不可
$numrate=$ITEM[$itemno]->{price} * $num;
} else {
OutError($AucImg.'你的金錢根本不足!') if ($DT->{money} < $num);
$numrate=$num;
}
OutError($AucImg.'要求品和報酬品不可以是一樣!') if ($itemno == $prn) ;
if ($prn > 0) {
OutError($AucImg.'要求品的數量太多。') if ($pr > $ITEM[$prn]->{limit}) ;
OutError($AucImg.'不可列出那個物品。') if ($ITEM[$prn]->{flag}=~/r/)||($ITEM[$prn]->{flag}=~/o/); # o 出品??
$prrate=$ITEM[$prn]->{price} * $pr;
} else {
$prrate=$pr;
}
OutError($AucImg.'要求和報酬的價錢未對應。請重新輸入。') if ($prrate > $numrate * 2) || ($numrate > $prrate * 2);

my @list=map{$_->{id}}@REQ;
@list=grep($_ eq $DT->{id},@list);
OutError($AucImg.'現時要求數太多!') if (scalar(@list) >= $REQUEST_CAPACITY);

@REQ=reverse(@REQ);
$Scount++;
my $i=$Scount;
$REQ[$i]->{no}=($i > 0) ? ($REQ[$i-1]->{no} + 1) : 1;
$REQ[$i]->{id}=$Q{id};
$REQ[$i]->{mode}=0;
$REQ[$i]->{tm}=$NOW_TIME + $REQUEST_LIMIT;
($REQ[$i]->{itemno},$REQ[$i]->{num},$REQ[$i]->{prn},$REQ[$i]->{pr})=($itemno,$num,$prn,$pr);
@REQ=reverse(@REQ);

$DT->{item}[$itemno-1]-=$num if ($itemno > 0);
$DT->{money}-=$num , $DT->{paytoday}+=$num if ($itemno < 0);

my $cost=0;
$cost=int($num * $DTTaxrate / 100) if ($itemno < 0);
$cost=int($pr * $DTTaxrate / 100) if ($prn < 0);
$DT->{taxtoday}+=$cost;
$DT->{money}-=$cost;
$disp.=$AucImg.'要求書已經完成。請等待玩家完成你的要求!';
}

sub plus
{
$i=SearchReqIndex($Q{idx});
OutError('沒有所選擇的交易') if ($i==-1);
my($itemno,$num,$prn,$pr,$mode)=($REQ[$i]->{itemno},$REQ[$i]->{num},$REQ[$i]->{prn},$REQ[$i]->{pr},$REQ[$i]->{mode});
OutError($AucImg.'這個交易已經達成。請你選擇另一個要求。') if defined($id2idx{$mode});
OutError($AucImg.'你的倉庫根本不足!') if ($prn > 0)&&($DT->{item}[$prn-1] < $pr) ;
OutError($AucImg.'你的金錢根本不足!') if ($prn < 0)&&($DT->{money} < $pr) ;

$DT->{item}[$prn-1]-=$pr if ($prn > 0);
$DT->{money}-=$pr, $DT->{paytoday}+=$pr if ($prn < 0);

if ($itemno > 0)
{
$DT->{item}[$itemno-1]+=$num;
$DT->{item}[$itemno-1]=$ITEM[$itemno]->{limit} if ($DT->{item}[$itemno-1]>$ITEM[$itemno]->{limit});
$disp.=$AucImg.'這個報酬'.$ITEM[$itemno]->{name}.' '.$num.$ITEM[$itemno]->{scale}.'非常形跡可疑!';
}
else
{
$DT->{money}+=$num;
$DT->{saletoday}+=$num;
$DT[$id2idx{$id}]->{paytoday}+=$pr if defined($id2idx{$id});
$disp.=$AucImg.'這個報酬\\'.$num.'。非常可疑!';
}
$REQ[$i]->{mode}=$DT->{id};
}

sub end
{
$i=SearchReqIndex($Q{idx});
OutError('沒有所選擇的交易') if ($i==-1);
my($itemno,$num)=($REQ[$i]->{itemno},$REQ[$i]->{num});

if ($itemno> 0)
{
$DT->{item}[$itemno-1]+=$num;
$DT->{item}[$itemno-1]=$ITEM[$itemno]->{limit} if ($DT->{item}[$itemno-1]>$ITEM[$itemno]->{limit});
}
else
{
$DT->{money}+=$num;
}

undef $REQ[$i];
$disp.=$AucImg.'這個交易已經取消。請你選擇另一個要求。';
}

sub thank
{
$i=SearchReqIndex($Q{idx});
OutError('沒有所選擇的交易') if ($i==-1);
OutError('不合理的要求') if ($REQ[$i]->{id} != $DT->{id});
my($no,$itemno,$num,$prn,$pr,$mode)=($REQ[$i]->{no},$REQ[$i]->{itemno},$REQ[$i]->{num},$REQ[$i]->{prn},$REQ[$i]->{pr},$REQ[$i]->{mode});

if ($prn > 0) {
$DT->{item}[$prn-1]+=$pr;
$DT->{item}[$prn-1]=$ITEM[$prn]->{limit} if ($DT->{item}[$prn-1]>$ITEM[$prn]->{limit});
$disp.=$AucImg.'這個要求品'.$ITEM[$prn]->{name}.' '.$pr.$ITEM[$prn]->{scale}.'。<br>';
$disp.=$DT[$id2idx{$mode}]->{shopname}.'送出!';
}
else
{
$DT->{money}+=$pr;
$DT->{saletoday}+=$pr;
$disp.=$AucImg.'這個代金\\'.$pr.'。<br>';
$disp.=$DT[$id2idx{$mode}]->{shopname}.'支付!';
}
undef $REQ[$i];
}

sub WriteAuc
{
my @buf;
foreach my $i(0..$Scount)
{
next unless defined($REQ[$i]->{no});
$buf[$i]=join(",",map{$REQ[$i]->{$_}}@REQnamelist)."\n";
}
OpenAndCheck(GetPath($TEMP_DIR,"request"));
print OUT @buf;
close(OUT);
}




回到 Webgame架設討論

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客

cron