All working for this script on Rathena this originally made by hercules but i want to use it to rathena svn
Working all function Except Online Account / Online Character
Anyone Can Help me ? Here 's the script
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
geffen,108,54,4 script Item Giver 4_M_KNIGHT_BLACK,{
//cutin "v_sprakki04",2;
//Check if setups are loaded.
if(!.Setup) {
callsub OnLoadSetup;
}
//Show GM Panel if player is GM.
if(getgmlevel() >= .GMin) menu("Take a prize as a player",-,"Give prize",OnManagement,"Reset Item Give",OnDelete,"IP Limit per Item",OnLimit);
//Read attached player gifts from SQL table.
if(select("Get Account Prize!:Get Character Prize!:Exit") == 1) {
set .@query, query_sql("SELECT * FROM `" + .GiftTableName$ + "` WHERE account_id="+getcharid(3), .@gift_id, .@gift_account, .@gift_char, .@gift_item, .@gift_amount, .@gift_duration, .@gift_time, .@gift_bound); //Account gifts.
} else if(@menu == 2) {
set .@query, query_sql("SELECT * FROM `" + .GiftTableName$ + "` WHERE char_id="+getcharid(0), .@gift_id, .@gift_account, .@gift_char, .@gift_item, .@gift_amount, .@gift_duration, .@gift_time, .@gift_bound); //Char gifts.
} else goto OnLeave;
//Check if player don't have gifts.
if(!.@query) {
mes "[Reward Giver]";
mes "Sorry, you don't have any prize";
cutin "v_sprakki04",255;
close;
}
//Build menu from query arrays.
mes "[" + strnpcinfo(1) + "]";
mes "^009900You got the prize^000000";
for(set .@i, 0; .@i < .@query; set .@i, .@i + 1) {
mes "(" + .@gift_amount[.@i] + ") " + getitemname(.@gift_item[.@i]) + ".";
set .@menu$, .@menu$ + getitemname(.@gift_item[.@i]) + ":";
}
next;
set .@mid,select(.@menu$); //Show menu.
set .@mid,.@mid-1;
if (.@gift_time[.@mid] && .@gift_time[.@mid] < gettimetick(2)) {
mes "[Reward Giver]";
mes "Sorry, this prize's claim time is already over.";
cutin "v_sprakki04",255;
close;
}
//Item is now selected. Choose what you want to do with it.
mes "[" + strnpcinfo(1) + "]";
mes "what you want do with (" + .@gift_amount[.@mid] + ") " + getitemname(.@gift_item[.@mid]) + "?";
next;
set .@Select,select("^009900Get it^000000:^ff0000Delete it! ^000000:nothings");
//Receive gift selected.
if(.@Select == 1) {
//Check weight.
if(checkweight( .@gift_item, .@gift_amount ) || .@gift_item[.@mid] == .ZenyID) {
mes "[" + strnpcinfo(1) + "]";
mes "^009900Get : (" + .@gift_amount[.@mid] + ") " + getitemname(.@gift_item[.@mid]) + ".^000000";
if (.ip_limit) {
// add ip_address to logs
.@ipexist = query_sql("SELECT item_id, ip_address, claim_count FROM " + .GiftTableNameIP$ + " WHERE ip_address = '"+getcharip()+"' AND item_id = "+.@gift_item[.@mid]+" LIMIT 1", .@item,.@ip,.@claim_count);
if (.@claim_count[0] >= .ip_limit) {
next;
mes "Sorry you have reached the maximum redeem limit for this IP address";
cutin "v_sprakki04",255;
close;
}
if (!.@claim_count[0]) {
query_sql("INSERT INTO " + .GiftTableNameIP$ + " (give_id,item_id,ip_address,claim_count) VALUES("+.@gift_id+","+.@gift_item+",'"+getcharip()+"',1)");
} else {
query_sql("UPDATE " + .GiftTableNameIP$ + " SET claim_count = "+(.@claim_count[0]+1)+" WHERE item_id = "+.@gift_item[.@mid]+" AND ip_address = '"+getcharip()+"'");
}
}
if (.@gift_item[.@mid] == .ZenyID) { // detects zeny ID and give zeny.
if (Zeny+.@gift_amount[.@mid] > .MaxZeny) {
mes "Please make sure that you have enough space to handle all these zennies and come back later.";
cutin "v_sprakki04",255;
close;
}
set Zeny,Zeny+.@gift_amount[.@mid];
} else {
if (.@gift_bound[.@mid]) {
getitembound .@gift_item[.@mid], .@gift_amount[.@mid], 1;
} else if (!.@gift_duration) {
getitem .@gift_item[.@mid], .@gift_amount[.@mid]; //Give item to player.
} else {
rentitem .@gift_item[.@mid], .@gift_duration * 60;
}
}
query_sql( "DELETE FROM `" + .GiftTableName$ + "` WHERE id = " + .@gift_id[.@mid] ); //Remove item from table.
cutin "v_sprakki04",255;
close;
} else {
//Overweight
mes "^ff0000Sorry ^000000 You can't take it " + getitemname(.@gift_item[.@mid]);
mes "Could lose some wight?";
cutin "v_sprakki04",255;
close;
}
}
//Remove gift selected.
else if(.@Select == 2) {
mes "[" + strnpcinfo(1) + "]";
mes "Are you sure you want dellet it?";
mes "Gift: ("+.@gift_amount[.@mid]+") "+getitemname(.@gift_item[.@mid])+".";
next;
if(select("Yes:No") == 1) {
mes "[" + strnpcinfo(1) + "]";
mes "^ff0000Dellet: ("+.@gift_amount[.@mid]+") "+getitemname(.@gift_item[.@mid])+".^000000";
query_sql("DELETE FROM `" + .GiftTableName$ + "` WHERE id = " + .@gift_id[.@mid]); //Remove item from table.
cutin "v_sprakki04",255;
close;
} else {
mes "[" + strnpcinfo(1) + "]";
mes "we will save it";
cutin "v_sprakki04",255;
close;
}
}
//Nothing selected.
else {
goto OnLeave;
}
//GM Panel below:
OnManagement:
if(getgmlevel() < .GMin) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "Welvome " + strcharinfo(0) + "!";
mes "How I can help you?";
next;
if(select("Make Gift:Nothing") != 1) goto OnLeave;
//Make new gift.
mes "[" + strnpcinfo(1) + "]";
mes "Please input the item id.";
mes "Default: 501";
next;
mes "What do you want to give?";
set .@zenygive,0;
if(select("Item:Zeny") == 1){
//item_id range of 501 to 30,000.
input .@new_item, 501, 30000;
next;
mes "Do you want to make this a bound item?";
.@boption = select("No:Expire Bound:Normal Bound");
if(.@boption == 2) {
next;
mes "Please tell me the duration in minutes";
input(.@duration);
} else if (.@boption == 3) {
next;
mes "Normal bound, selected.";
.@nbound = 1;
}
} else {
set .@new_item, .ZenyID;
set .@zenygive,1;
}
next;
mes "Do you want to add a claim timer?";
if(select("No:Yes")==2) {
next;
mes "How many minutes do you want this reward to be claimable?";
input(.@c);
.@claimtime = gettimetick(2)+(.@c*60);
}
if(select("Continue:Cancel") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "How many items/zeny?";
mes "Default: 1";
next;
//item quantity range of 1 to 1,000.
if(.@zenygive){
input .@new_value, 1, .MaxZeny;
} else {
input .@new_value, 1, 1000;
}
if (.@duration && .@new_value > 1) {
mes "You can only give 1 item bound at a time and please make sure that it is an equipment";
close;
}
if(select("Continue:Cancel") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "Please select input type:";
mes "1. Single Account";
mes "2. Single Character";
mes "3. All ^009900Online^000000 Accounts.";
mes "4. All Accounts.";
mes "5. All ^009900Online^000000 Players/Characters.";
mes "6. All Players/Characters.";
mes "7. ^ff0000Cancel.^000000";
next;
switch(select("Single Account:Single Character:^009900Online^000000 Accounts:All Accounts:^009900Online^000000 Characters:All Characters:Cancel"))
{
//Account gift
case 1:
mes "[" + strnpcinfo(1) + "]";
mes "Please select input type:";
mes "By AID or Name?";
next;
if(select("Account ID:Character Name") == 1)
{
mes "[" + strnpcinfo(1) + "]";
mes "Write account id:";
next;
input .@new_account, 2000000, 10000000; //Account id range from 2m to 10m.
set .@query, query_sql("SELECT account_id FROM `" + .CharTableName$ + "` WHERE account_id = " + .@new_account, .@new_account);
if(!.@query) goto OnNotExist;
if(select("Continue:Cancel") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "^009900Gift is ready to go!^000000";
mes "AID: ^ff0000" + .@new_account + "^000000";
mes "------------------";
mes "Item: ^ff0000" + getitemname(.@new_item) + "^000000";
mes "Quantity: ^ff0000" + .@new_value + "^000000";
mes "Duration: " + .@duration + " Minutes";
mes "Claim Time: " + .@c + " Minutes";
mes "Normal Bound: " + .@nbound;
next;
if(select("Send Gift:Cancel") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "Gift sending success!";
//Create gift. <auto_id>, <account_id> <char_id> <item> <value>
query_sql("INSERT INTO `" + .GiftTableName$ + "` (account_id, item, value, duration, timestamp, bound) VALUES(" + .@new_account + ", " + .@new_item + ", " + .@new_value + ", " + .@duration + ", " + .@claimtime + ", " + .@nbound + ")");
} else {
mes "[" + strnpcinfo(1) + "]";
mes "Write player name:";
next;
input .@new_name$;
set .@query, query_sql("SELECT account_id FROM `" + .CharTableName$ + "` WHERE name = '" + .@new_name$ + "'", .@new_account);
if(!.@query) goto OnNotExist;
if(select("Continue:Cancel") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "^009900Gift is ready to go!^000000";
mes "AID: ^ff0000" + .@new_account + "^000000";
mes "Name: ^ff0000"+ .@new_name$ + "^000000";
mes "------------------";
mes "Item: ^ff0000" + getitemname(.@new_item) + "^000000";
mes "Quantity: ^ff0000" + .@new_value + "^000000";
mes "Duration: " + .@duration + " Minutes";
mes "Claim Time: " + .@c + " Minutes";
mes "Normal Bound: " + .@nbound;
next;
if(select("Send Gift:Cancel") != 1) goto OnLeave;
//Check if player is logged in.
if(isloggedin(.@new_account)) {
mes "[" + strnpcinfo(1) + "]";
mes "Gift sending success!";
query_sql("INSERT INTO `" + .GiftTableName$ + "` (account_id, item, value, duration, timestamp, bound) VALUES(" + .@new_account + ", " + .@new_item + ", " + .@new_value + ", " + .@duration + ", " + .@claimtime + ", " + .@nbound + ")");
} else {
//Account was not online.
mes "[" + strnpcinfo(1) + "]";
mes "Gift sending success!";
query_sql("INSERT INTO `" + .GiftTableName$ + "` (account_id, item, value, duration, timestamp, bound) VALUES(" + .@new_account + ", " + .@new_item + ", " + .@new_value + ", " + .@duration + ", " + .@claimtime + ", " + .@nbound + ")"); // duplicate to other menus - continue here on giver side
}
}
break;
//Character gift.
case 2:
mes "[" + strnpcinfo(1) + "]";
mes "Please select input type:";
mes "By CID or Name?";
next;
if(select("Character ID:Character Name") == 1)
{
mes "[" + strnpcinfo(1) + "]";
mes "Write character id:";
next;
input .@new_char,150000, 10000000; //Char id range from 150k to 10m.
set .@query, query_sql("SELECT account_id, name FROM `" + .CharTableName$ + "` WHERE char_id = " + .@new_char, .@new_accountid, .@new_name$);
if(!.@query) goto OnNotExist;
if(select("Continue:Cancel") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "^009900Gift is ready to go!^000000";
mes "CID: ^ff0000" + .@new_char + "^000000";
mes "Name: ^ff0000" + .@new_name$ + "^000000";
mes "------------------";
mes "Item: ^ff0000" + getitemname(.@new_item) + "^000000";
mes "Quantity: ^ff0000" + .@new_value + "^000000";
mes "Duration: " + .@duration + " Minutes";
mes "Claim Time: " + .@c + " Minutes";
mes "Normal Bound: " + .@nbound;
next;
if(select("Send Gift:Cancel") != 1) goto OnLeave;
//Check if player is logged in.
if(isloggedin(.@new_accountid)) {
mes "[" + strnpcinfo(1) + "]";
mes "Gift sending success!";
//Create gift. <auto_id>, <account_id> <char_id> <item> <value>
query_sql("INSERT INTO `" + .GiftTableName$ + "` (char_id, item, value, duration, timestamp, bound) VALUES (" + .@new_char + ", " + .@new_item + ", " + .@new_value + "," + .@duration + "," + .@claimtime + ", " + .@nbound + ")");
} else {
//not online ask if we still give the gift.
mes "[" + strnpcinfo(1) + "]";
mes "The character is not online!";
mes "Would you still like to send the gift?";
next;
if(select("Yes:No") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "Gift sending success!";
//Create gift. <auto_id>, <account_id> <char_id> <item> <value>
query_sql("INSERT INTO `" + .GiftTableName$ + "` (char_id, item, value, duration, timestamp, bound) VALUES (" + .@new_char + ", " + .@new_item + ", " + .@new_value + "," + .@duration + "," + .@claimtime + ", " + .@nbound + ")");
}
} else {
mes "[" + strnpcinfo(1) + "]";
mes "Write player name:";
next;
input .@new_name$;
set .@query, query_sql("SELECT char_id, account_id FROM `" + .CharTableName$ + "` WHERE name = '" + .@new_name$ + "'", .@new_char, .@new_accountid);
if(!.@query) goto OnNotExist;
if(select("Continue:Cancel") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "^009900Gift is ready to go!^000000";
mes "CID: ^ff0000" + .@new_char + "^000000";
mes "Name: ^ff0000"+ .@new_name$ + "^000000";
mes "------------------";
mes "Item: ^ff0000" + getitemname(.@new_item) + "^000000";
mes "Quantity: ^ff0000" + .@new_value + "^000000";
mes "Duration: " + .@duration + " Minutes";
mes "Claim Time: " + .@c + " Minutes";
mes "Normal Bound: " + .@nbound;
next;
if(select("Send Gift:Cancel") != 1) goto OnLeave;
//Check if player is logged in.
if(isloggedin(.@new_accountid)) {
mes "[" + strnpcinfo(1) + "]";
mes "Gift sending success!";
query_sql("INSERT INTO `" + .GiftTableName$ + "` (char_id, item, value, duration, timestamp, bound) VALUES (" + .@new_char + ", " + .@new_item + ", " + .@new_value + "," + .@duration + "," + .@claimtime + ", " + .@nbound + ")");
} else {
//not online ask if we still give the gift.
mes "[" + strnpcinfo(1) + "]";
mes "The character is not online!";
mes "Would you still like to give the gift?";
next;
if(select("Yes:No") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "Gift sending success!";
//Create gift. <auto_id>, <account_id> <char_id> <item> <value>
query_sql("INSERT INTO `" + .GiftTableName$ + "` (char_id, item, value, duration, timestamp, bound) VALUES (" + .@new_char + ", " + .@new_item + ", " + .@new_value + "," + .@duration + "," + .@claimtime + ", " + .@nbound + ")");
}
}
announce strcharinfo(0)+" successfully sent " + .@new_value + "x " + getitemname(.@new_item) + " to " + .@new_name$,bc_all;
break;
//Register gift to all online accounts!
case 3:
mes "[" + strnpcinfo(1) + "]";
mes "^009900Gift is ready to go!^000000";
mes "Item: ^ff0000" + getitemname(.@new_item) + "^000000";
mes "Quantity: ^ff0000" + .@new_value + "^000000";
mes "Duration: " + .@duration + " Minutes";
mes "Claim Time: " + .@c + " Minutes";
mes "Normal Bound: " + .@nbound;
next;
if(select("Send Gift:Cancel") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "Please hold...";
set .@c, 0; //Counting success.
set .@query, query_sql("SELECT account_id FROM `"+.CharTableName$+"` WHERE online=1",.@account);
for(set .@i, 0; .@i < .@query; set .@i, .@i + 1) {
sleep2 25; //Slowdown the loop abit.
.@at = query_sql("SELECT account_id, char_id FROM "+$GiftTableNameAT$+" WHERE account_id = "+.@account[.@i]+"", .@account_id, .@char_id); // check if in the table
if (!.@at) {
query_sql("INSERT INTO `" + .GiftTableName$ + "` (account_id, item, value, duration, timestamp, bound) VALUES(" + .@account[.@i] + ", " + .@new_item + ", " + .@new_value + ", " + .@duration + ", " + .@claimtime + ", " + .@nbound + ")");
}
}
mes "Gift registered to (" + .@i + ") accounts!";
break;
//Register gift to all accounts!
case 4:
mes "[" + strnpcinfo(1) + "]";
mes "^009900Gift is ready to go!^000000";
mes "Item: ^ff0000" + getitemname(.@new_item) + "^000000";
mes "Quantity: ^ff0000" + .@new_value + "^000000";
mes "Claim Time: " + .@c + " Minutes";
mes "Normal Bound: " + .@nbound;
next;
if(select("Send Gift:Cancel") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "Please hold...";
set .@query, query_sql("SELECT account_id FROM `"+.LoginTableName$+"`",.@account);
for(set .@i, 0; .@i < .@query; set .@i, .@i + 1) {
sleep2 25; //Slowdown the loop abit.
query_sql("INSERT INTO `" + .GiftTableName$ + "` (account_id, item, value, duration, timestamp, bound) VALUES(" + .@account[.@i] + ", " + .@new_item + ", " + .@new_value + ", " + .@duration + ", " + .@claimtime + ", " + .@nbound + ")");
}
mes "Gift registered to (" + .@i + ") accounts!";
break;
//Register gift to all online characters!
case 5:
mes "[" + strnpcinfo(1) + "]";
mes "^009900Gift is ready to go!^000000";
mes "Item: ^ff0000" + getitemname(.@new_item) + "^000000";
mes "Quantity: ^ff0000" + .@new_value + "^000000";
mes "Claim Time: " + .@c + " Minutes";
mes "Normal Bound: " + .@nbound;
next;
if(select("Send Gift:Cancel") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "Please hold...";
set .@c, 0; //Counting success.
set .@query, query_sql("SELECT char_id FROM `"+.CharTableName$+"` WHERE online=1",.@char);
for(set .@i, 0; .@i < .@query; set .@i, .@i + 1) {
sleep2 25; //Slowdown the loop abit.
.@at = query_sql("SELECT account_id, char_id FROM "+$GiftTableNameAT$+" WHERE char_id = "+.@char[.@i]+"", .@account_id, .@char_id); // check if in the table
if (!.@at) {
query_sql("INSERT INTO `" + .GiftTableName$ + "` (char_id, item, value, duration, timestamp, bound) VALUES (" + .@char[.@i] + ", " + .@new_item + ", " + .@new_value + "," + .@duration + "," + .@claimtime + ", " + .@nbound + ")");
}
}
mes "Gift registered to (" + .@i + ") players!";
break;
//Register gift to all characters!
case 6:
mes "[" + strnpcinfo(1) + "]";
mes "^009900Gift is ready to go!^000000";
mes "Item: ^ff0000" + getitemname(.@new_item) + "^000000";
mes "Quantity: ^ff0000" + .@new_value + "^000000";
mes "Claim Time: " + .@c + " Minutes";
mes "Normal Bound: " + .@nbound;
next;
if(select("Send Gift:Cancel") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "Please hold...";
set .@query, query_sql("SELECT char_id FROM `"+.CharTableName$+"`",.@char);
for(set .@i, 0; .@i < .@query; set .@i, .@i + 1) {
sleep2 25; //Slowdown the loop abit.
query_sql("INSERT INTO `" + .GiftTableName$ + "` (char_id, item, value, duration, timestamp, bound) VALUES (" + .@char[.@i] + ", " + .@new_item + ", " + .@new_value + "," + .@duration + "," + .@claimtime + ", " + .@nbound + ")");
}
mes "Gift registered to (" + .@i + ") players!";
break;
//Cancel.
Default:
mes "[Reward Giver]";
mes "See you later";
break;
}
close;
OnLeave:
mes "[Reward Giver]";
mes "See you later";
cutin "v_sprakki04",255;
close;
OnNotExist:
mes "[" + strnpcinfo(1) + "]";
mes "This account does not exist!";
cutin "v_sprakki04",255;
close;
//============Reset Function=========================
OnDelete:
mes "Which gifts do you want to reset?";
mes "1. Single Account";
mes "2. Single Character";
mes "3. All ^009900Online^000000 Accounts.";
mes "4. All Accounts.";
mes "5. All ^009900Online^000000 Players/Characters.";
mes "6. All Players/Characters.";
mes "7. All cancel";
switch(select("Single Account:Single Character:^009900Online^000000 Accounts:All Accounts:^009900Online^000000 Characters:All Characters:Specific Item:IPLimit Logs:Cancel")) {
case 1: //Single Account
mes "[" + strnpcinfo(1) + "]";
mes "Please select input type:";
mes "By AID or Name?";
next;
if(select("Account ID:Character Name") == 1) {
mes "[" + strnpcinfo(1) + "]";
mes "Write account id:";
next;
input .@new_account, 2000000, 10000000; //Account id range from 2m to 10m.
set .@query, query_sql("SELECT account_id FROM `" + .CharTableName$ + "` WHERE account_id = " + .@new_account, .@new_account);
if(!.@query) goto OnNotExist;
if(select("Continue:Cancel") != 1) goto OnLeave;
query_sql("DELETE FROM " + .GiftTableName$ + " WHERE account_id = " + .@new_account);
} else {
mes "[" + strnpcinfo(1) + "]";
mes "Write player name:";
next;
input .@new_name$;
set .@query, query_sql("SELECT account_id FROM `" + .CharTableName$ + "` WHERE name = '" + .@new_name$ + "'", .@new_account);
if(!.@query) goto OnNotExist;
if(select("Continue:Cancel") != 1) goto OnLeave;
query_sql("DELETE FROM " + .GiftTableName$ + " WHERE account_id = " + .@new_account);
}
break;
case 2: //Single Character
mes "[" + strnpcinfo(1) + "]";
mes "Please select input type:";
mes "By CID or Name?";
next;
if(select("Character ID:Character Name") == 1)
{
mes "[" + strnpcinfo(1) + "]";
mes "Write character id:";
next;
input .@new_char,150000, 10000000; //Char id range from 150k to 10m.
set .@query, query_sql("SELECT account_id, name FROM `" + .CharTableName$ + "` WHERE char_id = " + .@new_char, .@new_accountid, .@new_name$);
if(!.@query) goto OnNotExist;
if(select("Continue:Cancel") != 1) goto OnLeave;
query_sql("DELETE FROM " + .GiftTableName$ + " WHERE char_id = " + .@new_char);
} else {
mes "[" + strnpcinfo(1) + "]";
mes "Write player name:";
next;
input .@new_name$;
set .@query, query_sql("SELECT char_id, account_id FROM `" + .CharTableName$ + "` WHERE name = '" + .@new_name$ + "'", .@new_char, .@new_accountid);
if(!.@query) goto OnNotExist;
if(select("Continue:Cancel") != 1) goto OnLeave;
query_sql("DELETE FROM " + .GiftTableName$ + " WHERE char_id = " + .@new_char);
}
break;
case 3: //All Online Accounts.
mes "[" + strnpcinfo(1) + "]";
mes "Please hold...";
set .@c, 0; //Counting success.
set .@query, query_sql("SELECT account_id FROM `"+.CharTableName$+"` WHERE online=1",.@account);
for(set .@i, 0; .@i < .@query; set .@i, .@i + 1) {
sleep2 25; //Slowdown the loop abit.
query_sql("DELETE FROM " + .GiftTableName$ + " WHERE account_id = " + .@account[.@i]);
}
break;
case 4: //All Accounts.
query_sql("DELETE FROM " + .GiftTableName$ + " WHERE account_id >= 1");
break;
case 5: //All Online Players/Characters.
mes "[" + strnpcinfo(1) + "]";
mes "Please hold...";
set .@c, 0; //Counting success.
set .@query, query_sql("SELECT char_id FROM `"+.CharTableName$+"` WHERE online=1",.@char);
for(set .@i, 0; .@i < .@query; set .@i, .@i + 1) {
sleep2 25; //Slowdown the loop abit.
query_sql("DELETE FROM " + .GiftTableName$ + " WHERE char_id = " + .@char[.@i]);
}
break;
case 6: //All Players/Characters.
query_sql("TRUNCATE TABLE " + .GiftTableName$);
break;
case 7: // Delete specific item
mes "Please type the id of the item you wish to delete";
mes "This will delete all entries with the item id you typed";
input(.@deletethis);
next;
mes "Are you sure you want to delete all entries of " + .@deletethis;
if (select("Yes:No")==1) {
query_sql("DELETE FROM " + .GiftTableName$ + " WHERE item = " + .@deletethis + "");
} else {
mes "Deletion cancelled";
close;
}
case 8: //All ip logs
query_sql("TRUNCATE TABLE " + .GiftTableNameIP$);
break;
default:
break;
}
next;
mes "deletion finished";
cutin "v_sprakki04",255;
close;
OnLimit:
mes "Please enter an ip limit, current limit is " + .ip_limit;
input(.ip_limit);
mes "Done!";
cutin "v_sprakki04",255;
close;
//============================================================
// Config/Edit:
//============================================================
OnLoadSetup:
set .Setup, 1; //OnInit is loaded check.
set .GMin, 60; //Minimum GM level to use gm panel.
set .ZenyID,23500; // put this when asked for which item to give zeny.
set .MaxZeny,1000000000;
//Your table names:
set .CharTableName$, "char"; //Character table name(SQL).
set .LoginTableName$, "login";
set .GiftTableName$, "reward"; //Gift table name(SQL).
set .GiftTableNameIP$, "reward_ip"; //Gift table name for ip tracker
set $GiftTableNameAT$, "reward_at"; //Gift table name for auto trade tracker
//Create gift table <auto_id>, <account_id>, <char_id>, <item>, <value>
query_sql("CREATE TABLE IF NOT EXISTS `reward` (`id` int(11) NOT NULL AUTO_INCREMENT,`account_id` int(11) unsigned NOT NULL DEFAULT '0',`char_id` int(11) unsigned NOT NULL DEFAULT '0',`item` int(11) NOT NULL DEFAULT '0',`value` int(11) NOT NULL DEFAULT '0',`duration` int(11) NOT NULL DEFAULT '0',`timestamp` int(23) NOT NULL DEFAULT '0',`bound` int(1) NOT NULL DEFAULT '0',PRIMARY KEY (`id`))");
query_sql("CREATE TABLE IF NOT EXISTS `reward_ip` ( `give_id` int(11) NOT NULL, `item_id` int(11) NOT NULL, `ip_address` varchar(23) NOT NULL, `claim_count` int(11) NOT NULL, PRIMARY KEY (`give_id`))");
query_sql("CREATE TABLE IF NOT EXISTS `reward_at` (`account_id` int(11) NOT NULL,`char_id` int(11) NOT NULL)");
return;
OnInit:
callsub OnLoadSetup;
end;
}
/* Manual table update for at tracker
CREATE TABLE IF NOT EXISTS `reward_at` (
`account_id` int(11) NOT NULL,
`char_id` int(11) NOT NULL
);
*/
- script anti_trader -1,{
OnInit:
.is_anti_trade = 1; // 0 to disable
end;
}
function script PG_30Seconds {
//dispbottom "anti trader 30sec";
//Check if Vending (normal or @at)
if(checkvending() >= 1) {
// mark as auto trader
.@query = query_sql("SELECT account_id, char_id FROM "+$GiftTableNameAT$+" WHERE account_id = "+getcharid(3)+"", .@account_id, .@char_id); // check if in the table
if (!.@query) { // add if not there yet
query_sql("INSERT INTO "+$GiftTableNameAT$+"(account_id,char_id) VALUES("+getcharid(3)+","+getcharid(0)+")");
//dispbottom "you have been marked as auto trader";
stopnpctimer;
detachnpctimer;
end;
}
}
return;
}
function script PG_Login {
//dispbottom "at delete";
.@query = query_sql("SELECT account_id, char_id FROM "+$GiftTableNameAT$+" WHERE account_id = "+getcharid(3)+"", .@account_id, .@char_id); // check if in the table
if (.@query) { // remove to reverify vending status
query_sql("DELETE FROM "+$GiftTableNameAT$+" WHERE account_id = "+getcharid(3)+"");
}
}
geffen,108,54,4 script Item Giver 4_M_KNIGHT_BLACK,{
//cutin "v_sprakki04",2;
//Check if setups are loaded.
if(!.Setup) {
callsub OnLoadSetup;
}
//Show GM Panel if player is GM.
if(getgmlevel() >= .GMin) menu("Take a prize as a player",-,"Give prize",OnManagement,"Reset Item Give",OnDelete,"IP Limit per Item",OnLimit);
//Read attached player gifts from SQL table.
if(select("Get Account Prize!:Get Character Prize!:Exit") == 1) {
set .@query, query_sql("SELECT * FROM `" + .GiftTableName$ + "` WHERE account_id="+getcharid(3), .@gift_id, .@gift_account, .@gift_char, .@gift_item, .@gift_amount, .@gift_duration, .@gift_time, .@gift_bound); //Account gifts.
} else if(@menu == 2) {
set .@query, query_sql("SELECT * FROM `" + .GiftTableName$ + "` WHERE char_id="+getcharid(0), .@gift_id, .@gift_account, .@gift_char, .@gift_item, .@gift_amount, .@gift_duration, .@gift_time, .@gift_bound); //Char gifts.
} else goto OnLeave;
//Check if player don't have gifts.
if(!.@query) {
mes "[Reward Giver]";
mes "Sorry, you don't have any prize";
cutin "v_sprakki04",255;
close;
}
//Build menu from query arrays.
mes "[" + strnpcinfo(1) + "]";
mes "^009900You got the prize^000000";
for(set .@i, 0; .@i < .@query; set .@i, .@i + 1) {
mes "(" + .@gift_amount[.@i] + ") " + getitemname(.@gift_item[.@i]) + ".";
set .@menu$, .@menu$ + getitemname(.@gift_item[.@i]) + ":";
}
next;
set .@mid,select(.@menu$); //Show menu.
set .@mid,.@mid-1;
if (.@gift_time[.@mid] && .@gift_time[.@mid] < gettimetick(2)) {
mes "[Reward Giver]";
mes "Sorry, this prize's claim time is already over.";
cutin "v_sprakki04",255;
close;
}
//Item is now selected. Choose what you want to do with it.
mes "[" + strnpcinfo(1) + "]";
mes "what you want do with (" + .@gift_amount[.@mid] + ") " + getitemname(.@gift_item[.@mid]) + "?";
next;
set .@Select,select("^009900Get it^000000:^ff0000Delete it! ^000000:nothings");
//Receive gift selected.
if(.@Select == 1) {
//Check weight.
if(checkweight( .@gift_item, .@gift_amount ) || .@gift_item[.@mid] == .ZenyID) {
mes "[" + strnpcinfo(1) + "]";
mes "^009900Get : (" + .@gift_amount[.@mid] + ") " + getitemname(.@gift_item[.@mid]) + ".^000000";
if (.ip_limit) {
// add ip_address to logs
.@ipexist = query_sql("SELECT item_id, ip_address, claim_count FROM " + .GiftTableNameIP$ + " WHERE ip_address = '"+getcharip()+"' AND item_id = "+.@gift_item[.@mid]+" LIMIT 1", .@item,.@ip,.@claim_count);
if (.@claim_count[0] >= .ip_limit) {
next;
mes "Sorry you have reached the maximum redeem limit for this IP address";
cutin "v_sprakki04",255;
close;
}
if (!.@claim_count[0]) {
query_sql("INSERT INTO " + .GiftTableNameIP$ + " (give_id,item_id,ip_address,claim_count) VALUES("+.@gift_id+","+.@gift_item+",'"+getcharip()+"',1)");
} else {
query_sql("UPDATE " + .GiftTableNameIP$ + " SET claim_count = "+(.@claim_count[0]+1)+" WHERE item_id = "+.@gift_item[.@mid]+" AND ip_address = '"+getcharip()+"'");
}
}
if (.@gift_item[.@mid] == .ZenyID) { // detects zeny ID and give zeny.
if (Zeny+.@gift_amount[.@mid] > .MaxZeny) {
mes "Please make sure that you have enough space to handle all these zennies and come back later.";
cutin "v_sprakki04",255;
close;
}
set Zeny,Zeny+.@gift_amount[.@mid];
} else {
if (.@gift_bound[.@mid]) {
getitembound .@gift_item[.@mid], .@gift_amount[.@mid], 1;
} else if (!.@gift_duration) {
getitem .@gift_item[.@mid], .@gift_amount[.@mid]; //Give item to player.
} else {
rentitem .@gift_item[.@mid], .@gift_duration * 60;
}
}
query_sql( "DELETE FROM `" + .GiftTableName$ + "` WHERE id = " + .@gift_id[.@mid] ); //Remove item from table.
cutin "v_sprakki04",255;
close;
} else {
//Overweight
mes "^ff0000Sorry ^000000 You can't take it " + getitemname(.@gift_item[.@mid]);
mes "Could lose some wight?";
cutin "v_sprakki04",255;
close;
}
}
//Remove gift selected.
else if(.@Select == 2) {
mes "[" + strnpcinfo(1) + "]";
mes "Are you sure you want dellet it?";
mes "Gift: ("+.@gift_amount[.@mid]+") "+getitemname(.@gift_item[.@mid])+".";
next;
if(select("Yes:No") == 1) {
mes "[" + strnpcinfo(1) + "]";
mes "^ff0000Dellet: ("+.@gift_amount[.@mid]+") "+getitemname(.@gift_item[.@mid])+".^000000";
query_sql("DELETE FROM `" + .GiftTableName$ + "` WHERE id = " + .@gift_id[.@mid]); //Remove item from table.
cutin "v_sprakki04",255;
close;
} else {
mes "[" + strnpcinfo(1) + "]";
mes "we will save it";
cutin "v_sprakki04",255;
close;
}
}
//Nothing selected.
else {
goto OnLeave;
}
//GM Panel below:
OnManagement:
if(getgmlevel() < .GMin) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "Welvome " + strcharinfo(0) + "!";
mes "How I can help you?";
next;
if(select("Make Gift:Nothing") != 1) goto OnLeave;
//Make new gift.
mes "[" + strnpcinfo(1) + "]";
mes "Please input the item id.";
mes "Default: 501";
next;
mes "What do you want to give?";
set .@zenygive,0;
if(select("Item:Zeny") == 1){
//item_id range of 501 to 30,000.
input .@new_item, 501, 30000;
next;
mes "Do you want to make this a bound item?";
.@boption = select("No:Expire Bound:Normal Bound");
if(.@boption == 2) {
next;
mes "Please tell me the duration in minutes";
input(.@duration);
} else if (.@boption == 3) {
next;
mes "Normal bound, selected.";
.@nbound = 1;
}
} else {
set .@new_item, .ZenyID;
set .@zenygive,1;
}
next;
mes "Do you want to add a claim timer?";
if(select("No:Yes")==2) {
next;
mes "How many minutes do you want this reward to be claimable?";
input(.@c);
.@claimtime = gettimetick(2)+(.@c*60);
}
if(select("Continue:Cancel") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "How many items/zeny?";
mes "Default: 1";
next;
//item quantity range of 1 to 1,000.
if(.@zenygive){
input .@new_value, 1, .MaxZeny;
} else {
input .@new_value, 1, 1000;
}
if (.@duration && .@new_value > 1) {
mes "You can only give 1 item bound at a time and please make sure that it is an equipment";
close;
}
if(select("Continue:Cancel") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "Please select input type:";
mes "1. Single Account";
mes "2. Single Character";
mes "3. All ^009900Online^000000 Accounts.";
mes "4. All Accounts.";
mes "5. All ^009900Online^000000 Players/Characters.";
mes "6. All Players/Characters.";
mes "7. ^ff0000Cancel.^000000";
next;
switch(select("Single Account:Single Character:^009900Online^000000 Accounts:All Accounts:^009900Online^000000 Characters:All Characters:Cancel"))
{
//Account gift
case 1:
mes "[" + strnpcinfo(1) + "]";
mes "Please select input type:";
mes "By AID or Name?";
next;
if(select("Account ID:Character Name") == 1)
{
mes "[" + strnpcinfo(1) + "]";
mes "Write account id:";
next;
input .@new_account, 2000000, 10000000; //Account id range from 2m to 10m.
set .@query, query_sql("SELECT account_id FROM `" + .CharTableName$ + "` WHERE account_id = " + .@new_account, .@new_account);
if(!.@query) goto OnNotExist;
if(select("Continue:Cancel") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "^009900Gift is ready to go!^000000";
mes "AID: ^ff0000" + .@new_account + "^000000";
mes "------------------";
mes "Item: ^ff0000" + getitemname(.@new_item) + "^000000";
mes "Quantity: ^ff0000" + .@new_value + "^000000";
mes "Duration: " + .@duration + " Minutes";
mes "Claim Time: " + .@c + " Minutes";
mes "Normal Bound: " + .@nbound;
next;
if(select("Send Gift:Cancel") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "Gift sending success!";
//Create gift. <auto_id>, <account_id> <char_id> <item> <value>
query_sql("INSERT INTO `" + .GiftTableName$ + "` (account_id, item, value, duration, timestamp, bound) VALUES(" + .@new_account + ", " + .@new_item + ", " + .@new_value + ", " + .@duration + ", " + .@claimtime + ", " + .@nbound + ")");
} else {
mes "[" + strnpcinfo(1) + "]";
mes "Write player name:";
next;
input .@new_name$;
set .@query, query_sql("SELECT account_id FROM `" + .CharTableName$ + "` WHERE name = '" + .@new_name$ + "'", .@new_account);
if(!.@query) goto OnNotExist;
if(select("Continue:Cancel") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "^009900Gift is ready to go!^000000";
mes "AID: ^ff0000" + .@new_account + "^000000";
mes "Name: ^ff0000"+ .@new_name$ + "^000000";
mes "------------------";
mes "Item: ^ff0000" + getitemname(.@new_item) + "^000000";
mes "Quantity: ^ff0000" + .@new_value + "^000000";
mes "Duration: " + .@duration + " Minutes";
mes "Claim Time: " + .@c + " Minutes";
mes "Normal Bound: " + .@nbound;
next;
if(select("Send Gift:Cancel") != 1) goto OnLeave;
//Check if player is logged in.
if(isloggedin(.@new_account)) {
mes "[" + strnpcinfo(1) + "]";
mes "Gift sending success!";
query_sql("INSERT INTO `" + .GiftTableName$ + "` (account_id, item, value, duration, timestamp, bound) VALUES(" + .@new_account + ", " + .@new_item + ", " + .@new_value + ", " + .@duration + ", " + .@claimtime + ", " + .@nbound + ")");
} else {
//Account was not online.
mes "[" + strnpcinfo(1) + "]";
mes "Gift sending success!";
query_sql("INSERT INTO `" + .GiftTableName$ + "` (account_id, item, value, duration, timestamp, bound) VALUES(" + .@new_account + ", " + .@new_item + ", " + .@new_value + ", " + .@duration + ", " + .@claimtime + ", " + .@nbound + ")"); // duplicate to other menus - continue here on giver side
}
}
break;
//Character gift.
case 2:
mes "[" + strnpcinfo(1) + "]";
mes "Please select input type:";
mes "By CID or Name?";
next;
if(select("Character ID:Character Name") == 1)
{
mes "[" + strnpcinfo(1) + "]";
mes "Write character id:";
next;
input .@new_char,150000, 10000000; //Char id range from 150k to 10m.
set .@query, query_sql("SELECT account_id, name FROM `" + .CharTableName$ + "` WHERE char_id = " + .@new_char, .@new_accountid, .@new_name$);
if(!.@query) goto OnNotExist;
if(select("Continue:Cancel") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "^009900Gift is ready to go!^000000";
mes "CID: ^ff0000" + .@new_char + "^000000";
mes "Name: ^ff0000" + .@new_name$ + "^000000";
mes "------------------";
mes "Item: ^ff0000" + getitemname(.@new_item) + "^000000";
mes "Quantity: ^ff0000" + .@new_value + "^000000";
mes "Duration: " + .@duration + " Minutes";
mes "Claim Time: " + .@c + " Minutes";
mes "Normal Bound: " + .@nbound;
next;
if(select("Send Gift:Cancel") != 1) goto OnLeave;
//Check if player is logged in.
if(isloggedin(.@new_accountid)) {
mes "[" + strnpcinfo(1) + "]";
mes "Gift sending success!";
//Create gift. <auto_id>, <account_id> <char_id> <item> <value>
query_sql("INSERT INTO `" + .GiftTableName$ + "` (char_id, item, value, duration, timestamp, bound) VALUES (" + .@new_char + ", " + .@new_item + ", " + .@new_value + "," + .@duration + "," + .@claimtime + ", " + .@nbound + ")");
} else {
//not online ask if we still give the gift.
mes "[" + strnpcinfo(1) + "]";
mes "The character is not online!";
mes "Would you still like to send the gift?";
next;
if(select("Yes:No") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "Gift sending success!";
//Create gift. <auto_id>, <account_id> <char_id> <item> <value>
query_sql("INSERT INTO `" + .GiftTableName$ + "` (char_id, item, value, duration, timestamp, bound) VALUES (" + .@new_char + ", " + .@new_item + ", " + .@new_value + "," + .@duration + "," + .@claimtime + ", " + .@nbound + ")");
}
} else {
mes "[" + strnpcinfo(1) + "]";
mes "Write player name:";
next;
input .@new_name$;
set .@query, query_sql("SELECT char_id, account_id FROM `" + .CharTableName$ + "` WHERE name = '" + .@new_name$ + "'", .@new_char, .@new_accountid);
if(!.@query) goto OnNotExist;
if(select("Continue:Cancel") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "^009900Gift is ready to go!^000000";
mes "CID: ^ff0000" + .@new_char + "^000000";
mes "Name: ^ff0000"+ .@new_name$ + "^000000";
mes "------------------";
mes "Item: ^ff0000" + getitemname(.@new_item) + "^000000";
mes "Quantity: ^ff0000" + .@new_value + "^000000";
mes "Duration: " + .@duration + " Minutes";
mes "Claim Time: " + .@c + " Minutes";
mes "Normal Bound: " + .@nbound;
next;
if(select("Send Gift:Cancel") != 1) goto OnLeave;
//Check if player is logged in.
if(isloggedin(.@new_accountid)) {
mes "[" + strnpcinfo(1) + "]";
mes "Gift sending success!";
query_sql("INSERT INTO `" + .GiftTableName$ + "` (char_id, item, value, duration, timestamp, bound) VALUES (" + .@new_char + ", " + .@new_item + ", " + .@new_value + "," + .@duration + "," + .@claimtime + ", " + .@nbound + ")");
} else {
//not online ask if we still give the gift.
mes "[" + strnpcinfo(1) + "]";
mes "The character is not online!";
mes "Would you still like to give the gift?";
next;
if(select("Yes:No") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "Gift sending success!";
//Create gift. <auto_id>, <account_id> <char_id> <item> <value>
query_sql("INSERT INTO `" + .GiftTableName$ + "` (char_id, item, value, duration, timestamp, bound) VALUES (" + .@new_char + ", " + .@new_item + ", " + .@new_value + "," + .@duration + "," + .@claimtime + ", " + .@nbound + ")");
}
}
announce strcharinfo(0)+" successfully sent " + .@new_value + "x " + getitemname(.@new_item) + " to " + .@new_name$,bc_all;
break;
//Register gift to all online accounts!
case 3:
mes "[" + strnpcinfo(1) + "]";
mes "^009900Gift is ready to go!^000000";
mes "Item: ^ff0000" + getitemname(.@new_item) + "^000000";
mes "Quantity: ^ff0000" + .@new_value + "^000000";
mes "Duration: " + .@duration + " Minutes";
mes "Claim Time: " + .@c + " Minutes";
mes "Normal Bound: " + .@nbound;
next;
if(select("Send Gift:Cancel") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "Please hold...";
set .@c, 0; //Counting success.
set .@query, query_sql("SELECT account_id FROM `"+.CharTableName$+"` WHERE online=1",.@account);
for(set .@i, 0; .@i < .@query; set .@i, .@i + 1) {
sleep2 25; //Slowdown the loop abit.
.@at = query_sql("SELECT account_id, char_id FROM "+$GiftTableNameAT$+" WHERE account_id = "+.@account[.@i]+"", .@account_id, .@char_id); // check if in the table
if (!.@at) {
query_sql("INSERT INTO `" + .GiftTableName$ + "` (account_id, item, value, duration, timestamp, bound) VALUES(" + .@account[.@i] + ", " + .@new_item + ", " + .@new_value + ", " + .@duration + ", " + .@claimtime + ", " + .@nbound + ")");
}
}
mes "Gift registered to (" + .@i + ") accounts!";
break;
//Register gift to all accounts!
case 4:
mes "[" + strnpcinfo(1) + "]";
mes "^009900Gift is ready to go!^000000";
mes "Item: ^ff0000" + getitemname(.@new_item) + "^000000";
mes "Quantity: ^ff0000" + .@new_value + "^000000";
mes "Claim Time: " + .@c + " Minutes";
mes "Normal Bound: " + .@nbound;
next;
if(select("Send Gift:Cancel") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "Please hold...";
set .@query, query_sql("SELECT account_id FROM `"+.LoginTableName$+"`",.@account);
for(set .@i, 0; .@i < .@query; set .@i, .@i + 1) {
sleep2 25; //Slowdown the loop abit.
query_sql("INSERT INTO `" + .GiftTableName$ + "` (account_id, item, value, duration, timestamp, bound) VALUES(" + .@account[.@i] + ", " + .@new_item + ", " + .@new_value + ", " + .@duration + ", " + .@claimtime + ", " + .@nbound + ")");
}
mes "Gift registered to (" + .@i + ") accounts!";
break;
//Register gift to all online characters!
case 5:
mes "[" + strnpcinfo(1) + "]";
mes "^009900Gift is ready to go!^000000";
mes "Item: ^ff0000" + getitemname(.@new_item) + "^000000";
mes "Quantity: ^ff0000" + .@new_value + "^000000";
mes "Claim Time: " + .@c + " Minutes";
mes "Normal Bound: " + .@nbound;
next;
if(select("Send Gift:Cancel") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "Please hold...";
set .@c, 0; //Counting success.
set .@query, query_sql("SELECT char_id FROM `"+.CharTableName$+"` WHERE online=1",.@char);
for(set .@i, 0; .@i < .@query; set .@i, .@i + 1) {
sleep2 25; //Slowdown the loop abit.
.@at = query_sql("SELECT account_id, char_id FROM "+$GiftTableNameAT$+" WHERE char_id = "+.@char[.@i]+"", .@account_id, .@char_id); // check if in the table
if (!.@at) {
query_sql("INSERT INTO `" + .GiftTableName$ + "` (char_id, item, value, duration, timestamp, bound) VALUES (" + .@char[.@i] + ", " + .@new_item + ", " + .@new_value + "," + .@duration + "," + .@claimtime + ", " + .@nbound + ")");
}
}
mes "Gift registered to (" + .@i + ") players!";
break;
//Register gift to all characters!
case 6:
mes "[" + strnpcinfo(1) + "]";
mes "^009900Gift is ready to go!^000000";
mes "Item: ^ff0000" + getitemname(.@new_item) + "^000000";
mes "Quantity: ^ff0000" + .@new_value + "^000000";
mes "Claim Time: " + .@c + " Minutes";
mes "Normal Bound: " + .@nbound;
next;
if(select("Send Gift:Cancel") != 1) goto OnLeave;
mes "[" + strnpcinfo(1) + "]";
mes "Please hold...";
set .@query, query_sql("SELECT char_id FROM `"+.CharTableName$+"`",.@char);
for(set .@i, 0; .@i < .@query; set .@i, .@i + 1) {
sleep2 25; //Slowdown the loop abit.
query_sql("INSERT INTO `" + .GiftTableName$ + "` (char_id, item, value, duration, timestamp, bound) VALUES (" + .@char[.@i] + ", " + .@new_item + ", " + .@new_value + "," + .@duration + "," + .@claimtime + ", " + .@nbound + ")");
}
mes "Gift registered to (" + .@i + ") players!";
break;
//Cancel.
Default:
mes "[Reward Giver]";
mes "See you later";
break;
}
close;
OnLeave:
mes "[Reward Giver]";
mes "See you later";
cutin "v_sprakki04",255;
close;
OnNotExist:
mes "[" + strnpcinfo(1) + "]";
mes "This account does not exist!";
cutin "v_sprakki04",255;
close;
//============Reset Function=========================
OnDelete:
mes "Which gifts do you want to reset?";
mes "1. Single Account";
mes "2. Single Character";
mes "3. All ^009900Online^000000 Accounts.";
mes "4. All Accounts.";
mes "5. All ^009900Online^000000 Players/Characters.";
mes "6. All Players/Characters.";
mes "7. All cancel";
switch(select("Single Account:Single Character:^009900Online^000000 Accounts:All Accounts:^009900Online^000000 Characters:All Characters:Specific Item:IPLimit Logs:Cancel")) {
case 1: //Single Account
mes "[" + strnpcinfo(1) + "]";
mes "Please select input type:";
mes "By AID or Name?";
next;
if(select("Account ID:Character Name") == 1) {
mes "[" + strnpcinfo(1) + "]";
mes "Write account id:";
next;
input .@new_account, 2000000, 10000000; //Account id range from 2m to 10m.
set .@query, query_sql("SELECT account_id FROM `" + .CharTableName$ + "` WHERE account_id = " + .@new_account, .@new_account);
if(!.@query) goto OnNotExist;
if(select("Continue:Cancel") != 1) goto OnLeave;
query_sql("DELETE FROM " + .GiftTableName$ + " WHERE account_id = " + .@new_account);
} else {
mes "[" + strnpcinfo(1) + "]";
mes "Write player name:";
next;
input .@new_name$;
set .@query, query_sql("SELECT account_id FROM `" + .CharTableName$ + "` WHERE name = '" + .@new_name$ + "'", .@new_account);
if(!.@query) goto OnNotExist;
if(select("Continue:Cancel") != 1) goto OnLeave;
query_sql("DELETE FROM " + .GiftTableName$ + " WHERE account_id = " + .@new_account);
}
break;
case 2: //Single Character
mes "[" + strnpcinfo(1) + "]";
mes "Please select input type:";
mes "By CID or Name?";
next;
if(select("Character ID:Character Name") == 1)
{
mes "[" + strnpcinfo(1) + "]";
mes "Write character id:";
next;
input .@new_char,150000, 10000000; //Char id range from 150k to 10m.
set .@query, query_sql("SELECT account_id, name FROM `" + .CharTableName$ + "` WHERE char_id = " + .@new_char, .@new_accountid, .@new_name$);
if(!.@query) goto OnNotExist;
if(select("Continue:Cancel") != 1) goto OnLeave;
query_sql("DELETE FROM " + .GiftTableName$ + " WHERE char_id = " + .@new_char);
} else {
mes "[" + strnpcinfo(1) + "]";
mes "Write player name:";
next;
input .@new_name$;
set .@query, query_sql("SELECT char_id, account_id FROM `" + .CharTableName$ + "` WHERE name = '" + .@new_name$ + "'", .@new_char, .@new_accountid);
if(!.@query) goto OnNotExist;
if(select("Continue:Cancel") != 1) goto OnLeave;
query_sql("DELETE FROM " + .GiftTableName$ + " WHERE char_id = " + .@new_char);
}
break;
case 3: //All Online Accounts.
mes "[" + strnpcinfo(1) + "]";
mes "Please hold...";
set .@c, 0; //Counting success.
set .@query, query_sql("SELECT account_id FROM `"+.CharTableName$+"` WHERE online=1",.@account);
for(set .@i, 0; .@i < .@query; set .@i, .@i + 1) {
sleep2 25; //Slowdown the loop abit.
query_sql("DELETE FROM " + .GiftTableName$ + " WHERE account_id = " + .@account[.@i]);
}
break;
case 4: //All Accounts.
query_sql("DELETE FROM " + .GiftTableName$ + " WHERE account_id >= 1");
break;
case 5: //All Online Players/Characters.
mes "[" + strnpcinfo(1) + "]";
mes "Please hold...";
set .@c, 0; //Counting success.
set .@query, query_sql("SELECT char_id FROM `"+.CharTableName$+"` WHERE online=1",.@char);
for(set .@i, 0; .@i < .@query; set .@i, .@i + 1) {
sleep2 25; //Slowdown the loop abit.
query_sql("DELETE FROM " + .GiftTableName$ + " WHERE char_id = " + .@char[.@i]);
}
break;
case 6: //All Players/Characters.
query_sql("TRUNCATE TABLE " + .GiftTableName$);
break;
case 7: // Delete specific item
mes "Please type the id of the item you wish to delete";
mes "This will delete all entries with the item id you typed";
input(.@deletethis);
next;
mes "Are you sure you want to delete all entries of " + .@deletethis;
if (select("Yes:No")==1) {
query_sql("DELETE FROM " + .GiftTableName$ + " WHERE item = " + .@deletethis + "");
} else {
mes "Deletion cancelled";
close;
}
case 8: //All ip logs
query_sql("TRUNCATE TABLE " + .GiftTableNameIP$);
break;
default:
break;
}
next;
mes "deletion finished";
cutin "v_sprakki04",255;
close;
OnLimit:
mes "Please enter an ip limit, current limit is " + .ip_limit;
input(.ip_limit);
mes "Done!";
cutin "v_sprakki04",255;
close;
//============================================================
// Config/Edit:
//============================================================
OnLoadSetup:
set .Setup, 1; //OnInit is loaded check.
set .GMin, 60; //Minimum GM level to use gm panel.
set .ZenyID,23500; // put this when asked for which item to give zeny.
set .MaxZeny,1000000000;
//Your table names:
set .CharTableName$, "char"; //Character table name(SQL).
set .LoginTableName$, "login";
set .GiftTableName$, "reward"; //Gift table name(SQL).
set .GiftTableNameIP$, "reward_ip"; //Gift table name for ip tracker
set $GiftTableNameAT$, "reward_at"; //Gift table name for auto trade tracker
//Create gift table <auto_id>, <account_id>, <char_id>, <item>, <value>
query_sql("CREATE TABLE IF NOT EXISTS `reward` (`id` int(11) NOT NULL AUTO_INCREMENT,`account_id` int(11) unsigned NOT NULL DEFAULT '0',`char_id` int(11) unsigned NOT NULL DEFAULT '0',`item` int(11) NOT NULL DEFAULT '0',`value` int(11) NOT NULL DEFAULT '0',`duration` int(11) NOT NULL DEFAULT '0',`timestamp` int(23) NOT NULL DEFAULT '0',`bound` int(1) NOT NULL DEFAULT '0',PRIMARY KEY (`id`))");
query_sql("CREATE TABLE IF NOT EXISTS `reward_ip` ( `give_id` int(11) NOT NULL, `item_id` int(11) NOT NULL, `ip_address` varchar(23) NOT NULL, `claim_count` int(11) NOT NULL, PRIMARY KEY (`give_id`))");
query_sql("CREATE TABLE IF NOT EXISTS `reward_at` (`account_id` int(11) NOT NULL,`char_id` int(11) NOT NULL)");
return;
OnInit:
callsub OnLoadSetup;
end;
}
/* Manual table update for at tracker
CREATE TABLE IF NOT EXISTS `reward_at` (
`account_id` int(11) NOT NULL,
`char_id` int(11) NOT NULL
);
*/
- script anti_trader -1,{
OnInit:
.is_anti_trade = 1; // 0 to disable
end;
}
function script PG_30Seconds {
//dispbottom "anti trader 30sec";
//Check if Vending (normal or @at)
if(checkvending() >= 1) {
// mark as auto trader
.@query = query_sql("SELECT account_id, char_id FROM "+$GiftTableNameAT$+" WHERE account_id = "+getcharid(3)+"", .@account_id, .@char_id); // check if in the table
if (!.@query) { // add if not there yet
query_sql("INSERT INTO "+$GiftTableNameAT$+"(account_id,char_id) VALUES("+getcharid(3)+","+getcharid(0)+")");
//dispbottom "you have been marked as auto trader";
stopnpctimer;
detachnpctimer;
end;
}
}
return;
}
function script PG_Login {
//dispbottom "at delete";
.@query = query_sql("SELECT account_id, char_id FROM "+$GiftTableNameAT$+" WHERE account_id = "+getcharid(3)+"", .@account_id, .@char_id); // check if in the table
if (.@query) { // remove to reverify vending status
query_sql("DELETE FROM "+$GiftTableNameAT$+" WHERE account_id = "+getcharid(3)+"");
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Question
Winter1992
All working for this script on Rathena this originally made by hercules but i want to use it to rathena svn
Working all function Except Online Account / Online Character
Anyone Can Help me ? Here 's the script
price-giver-sql.txt
Edited by Emistrycodebox
Link to comment
Share on other sites
9 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.