Wäre halt schön deine bisherigen Versuche anzusehen anstatt direkt zu verlangen das jemand dir die Arbeit abnimmt.
In deinem script ist kein Timer, du prüfst lediglich für das vending.
Dein aktuelles script scaled nicht wirklich gut wenn du einmal mehr Spieler hast.
Da fängst du an deine SQL Datenbank mit grösseren Abfragen konstant zu penetrieren. (Der char table wird in der Regel sehr schnell sehr gross)
Ich würde vorschlagen einen Timer an jeden Spieler zu attachen sobald man einloggt, und diesen auch sauber wieder zu entfernen.
Die meisten Login Reward Scripts basieren ja eigentlich genau auf diesem Prinzip, und von denen gibt es wirklich mehr als genug.
Da kannst du dann sowas machen wie zB:
- script LOGIN -1,{
OnPCLogoutEvent:
deltimer strnpcinfo(0)+"::OnTimer";
OnPCLoginEvent:
.@i = (gettime(DT_YEAR) * 365 * 24 * 60) + (gettime(DT_DAYOFYEAR) * 24 * 60) + (gettime(DT_HOUR) * 60) +gettime(DT_MINUTE);
.@t = .Rest - #DRewardTimer;
.@state = checkvending();
if (.@i >= (#LastReward + .MinWait)) {
addtimer 60000,strnpcinfo(0)+"::OnTimer";
end;
OnTimer:
if ( #DRewardTimer < .Rest ) {
if (!(checkidle() >= 600) && (!(.@state&1) || !(.@state&2) || !(.@state&4)) && isloggedin(getcharid(3))) {
#DRewardTimer++;
}
addtimer 60000,strnpcinfo(0)+"::OnTimer";
end;
}
} else {
.@mins = (#LastReward + .MinWait - .@i)%60;
message strcharinfo(0),"[Reward Test]: You have "+ ((.@mins) ? .@mins +" Minutes " : "") +"till your next reward.";
addtimer (.@mins * 60000),strnpcinfo(0)+"::OnTimer";
end;
}
Claim:
getitembound 512, 1, Bound_Account;
#LastReward = .@i;
#DRewardClaim = 0;
#DRewardTimer = 0;
message strcharinfo(0),"[Reward Test]: You have collected your 15min reward.";
.@mins = (#LastReward + .MinWait - .@i)%60;
addtimer (.@mins * 60000),strnpcinfo(0)+"::OnTimer";
}
end;
OnInit:
// Minimum minutes between collecting reward
.MinWait = 15;
// Number of mins after logging before collecting prize
.Rest = 15;
end;
}
Wichtig:
Ich habs nicht getestet und wird daher auch nicht funktional sein.
Aber ich hoffe es gibt dir eine Idee wie du es hoffentlich lösen kannst.
Das basiert auf einem Login Reward system, das heisst es pickt nicht einen einzelnen Spieler, sondern es läuft auf allen online charakter.
Könntest du aber entsprechend modifizieren.
Will auch nicht behaupten das es die beste Lösung ist, aber sicherlich besser als direkte SQL char table Abfragen.
Zumindest meine Meinung.