Corrected WOE Controller Reward

* Fixed an issue when several characters with the same ip are in the same guild and ip check is enabled, the character offline could receive the reward instead of the character online
Fixed #4833

Thanks to @mazvi !
This commit is contained in:
Atemo 2020-06-08 23:51:07 +02:00 committed by GitHub
parent 1cc29e5a04
commit 47732f92db
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -283,13 +283,36 @@ OnReward:
.@cid[0] = .@master_cid;
.@aid[0] = .@master_aid;
}
for(set .@j,0; .@j<.@size_guild; set .@j,.@j+1) {
if ((.Options&8) && !(.Options&4)) {
set .@ip$, replacestr(getcharip(.@aid[.@j]),".","a");
if (getd(".@ip_"+.@i+"_"+.@ip$)) continue;
setd ".@ip_"+.@i+"_"+.@ip$,1;
else if (.Options&8) {
for ( .@j = 0; .@j < .@size_guild; ++.@j ) {
.@is_online[.@j] = isloggedin( .@aid[.@j], .@cid[.@j] );
if (.@is_online[.@j])
.@ip$ = replacestr(getcharip(.@aid[.@j]),".","a");
else {
if (query_sql("SELECT `last_ip` FROM `login` WHERE `account_id` = '" + .@aid[.@j] + "'", .@last_ip$) < 1)
continue;
.@ip$ = replacestr(.@last_ip$, ".", "a");
}
.@variable$ = ".@ip_" + .@i + "_" + .@ip$;
.@index = getd(.@variable$) - 1;
if (.@index >= 0) {
if (.@is_online[.@j]) {
.@tmp_account_id[.@index] = .@aid[.@j];
.@tmp_char_id[.@index] = .@cid[.@j];
}
continue;
}
setd .@variable$, .@j+1;
.@tmp_account_id[.@k] = .@aid[.@j];
.@tmp_char_id[.@k] = .@cid[.@j];
.@k++;
}
copyarray .@aid[0], .@tmp_account_id[0], .@k;
copyarray .@cid[0], .@tmp_char_id[0], .@k;
.@size_guild = .@k;
}
for(set .@j,0; .@j<.@size_guild; set .@j,.@j+1) {
if (.Options&2) {
.@charid = .@cid[.@j];
.@sender$ = "no-reply";
@ -318,7 +341,6 @@ OnReward:
}
Zeny += .reward_zeny;
dispbottom "You have been rewarded for conquering " + .@castle_name$ + ".";
detachrid;
}
}
}
@ -326,15 +348,14 @@ OnReward:
return;
OnPCLoadMapEvent:
.@compare_val = compare(strcharinfo(3),"g_cas");
if (!.@compare_val) end;
if (!compare(strcharinfo(3),"g_cas")) end;
if (((.AutoKick && .Active[0]) || (.NoOwner && !getcastledata(strcharinfo(3),1))) && !(.Active[0]&(1<<getd("."+strcharinfo(3))))) {
if (getcharid(2) && getcastledata(strcharinfo(3),1) == getcharid(2)) end;
.@castle_name$ = getcastlename(strcharinfo(3));
sleep2 1000;
message strcharinfo(0), .@castle_name$ + " is currently inactive.";
sleep2 5000;
if (.@compare_val) warp "SavePoint",0,0;
if (compare(strcharinfo(3),"g_cas")) warp "SavePoint",0,0;
}
end;