// Copyrights Notice
// ========================================================
// This work is licensed under the Creative Commons Attribution-NonCommercial 4.0 International License.
// To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/4.0/.
// ========================================================
// Introduction
// ========================================================
// Copyrights 2015-2020 Jordan Lacandula All rights reserved
// ========================================================
// Script: Guild Package Giver/Redeemer NPC
// ========================================================
// Programmer: Jordan Lacandula
// Website: For more info, visit http://jordanlacandula.tk/
// ========================================================
// Bug Report/Job Request
// ========================================================
// Email: [email protected]
// Skype: jordan.lacandula
// ========================================================
// Features/Includes
// ========================================================
// SQL Database Support
// used table names `gpack_code` and `guild_package`
// Duplicate IP Checking (also supports same IP, see below)
// Account Checking
// Online Status Checker
// Easy to change Package items for guild master
// Easy to change Package items for guild member
// Minimum Guild members Checking (default: 8)
// ========================================================
// Multiple IP ( Use gpack code to bypass IP Checking )
// ========================================================
// End Introduction
// ========================================================
prontera,155,178,5 script Guild Master 421,{
if( getgmlevel() == 99 ){
set .c_length,10;
setarray .g_code$[0],"A","B","C","D","E","F","G","H","I","J","K","L", "M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","0","1","2","3","4","5","6","7","8","9";
mes "What can i do for you Sire?";
switch(select("Nothing:View Code List:^FF0000 Add Package Code^000000")){
case 1:
break;
case 2:
query_sql("SELECT `guild_id`, `gcode`,`status` FROM `gpack_code` ORDER BY `status` DESC",.@glist,.@codeview$,.@stts);
dispbottom "Status | GPack Code";
for(set @ei,0; @ei < getarraysize(.@codeview$); set @ei,@ei + 1){
query_sql("SELECT `name` FROM `guild` WHERE `guild_id` = '"+.@glist[@ei]+"'",.@gn$);
dispbottom ""+.@stts[@ei]+" | "+.@codeview$[@ei]+" | "+.@gn$+"";
}
close;
break;
case 3:
next;
mes "Creating New Code for Guild: ";
input .@rguild$;
set .@cr,query_sql("SELECT `guild_id` FROM `guild` WHERE `name` = '"+.@rguild$+"'",.@g);
if(.@cr <= 0){
mes "^FF0000 Guild Not Found!^000000";
close;
}
for(set @i, 0; @i< .c_length; set @i, @i+1)
{
set @random_char, rand(0,(getarraysize(.g_code$)-1));
set @new_code$, @new_code$ + .g_code$[@random_char];
}
query_sql "INSERT INTO `gpack_code` (`guild_id`, `gcode`, `status`) VALUES ('"+.@g+"', '"+@new_code$+"', '0')";
set @new_code$, "";
next;
mes "Added Code for Guild";
mes "^FF0000 "+.@rguild$+"^000000";
close;
break;
}
mes "Proceeding to Player View";
next;
}
set .@hascode,0;
set .@code$,"null";
setarray .@gmaster[0],607,1,504,1; //gmaster pack
setarray .@gmember[0],607,10,504,1; //gmember pack
if(getcharid(2) == 0){
mes "you're not member of a guild";
close;
}
query_sql("SELECT `master` FROM `guild` WHERE `guild_id` = '"+getcharid(2)+"'",.@gid$);
if(.@gid$ != strcharinfo(0)){
mes "Only Guild Masters can claim the packages";
close;
}
mes "^FF0000 Guild Package^000000";
mes "Greetings ^FF0000 "+strcharinfo(0)+"^000000";
mes "Master of the Guild^FF0000 "+strcharinfo(2)+"^000000.";
next;
mes "Do you have code?";
switch(select("No:Yes")){
case 1:
break;
case 2:
input .@code$;
mes "Verifying Code";
mes "Please Wait....";
set .@csr,query_sql("SELECT `gcode` FROM `gpack_code` WHERE `gcode` = '"+.@code$+"'");
if ( .@csr <= 0 ){
next;
mes "^FF0000 Invalid Code^000000";
mes "Codes are Case-Sensitive, Please make sure of it.";
close;
}
query_sql("SELECT `status` FROM `gpack_code` WHERE `gcode` = '"+.@code$+"'",.@used);
if( .@used != 0 ){
mes "Guild Package code has been used already";
close;
}
set .@hascode,1;
break;
}
next;
mes "Do you wish to claim your ^FF0000 Guild Package^000000 ?";
switch(select("No:Yes")){
case 1:
close;
break;
case 2:
next;
mes "^FF0000 CLAIM GUILD PACKAGE^000000 ";
mes "Master will receive the following:";
for ( set .@i, 0; .@i < getarraysize(.@gmaster); set .@i, .@i + 2 )
mes .@gmaster[.@i+1] + " x " + getitemname(.@gmaster[.@i]);
next;
mes "^FF0000 CLAIM GUILD PACKAGE^000000 ";
mes "Members will receive the following:";
for ( set .@i, 0; .@i < getarraysize(.@gmember); set .@i, .@i + 2 )
mes .@gmember[.@i+1] + " x " + getitemname(.@gmember[.@i]);
next;
mes "[^FF0000 Warning^000000 ]";
mes "Every one in your Guild can only claim Once regarding of their IP.";
mes "Only Online characters can claim a Guld Package";
mes "No special treatments if characters go offline while in process of claiming";
next;
mes "^FF0000 NOTE:^000000 You can only claim once.";
mes "^FF0000 NOTE:^000000 All members should be online.";
mes "^FF0000 NOTE:^000000 Make sure everyone have lots of Space in their inventory.";
next;
mes "^FF0000 CLAIM GUILD PACKAGE^000000 ";
mes "Claim now?";
switch(select("No:Yes")){
case 1:
close;
break;
case 2:
next;
set .@mm,3; //required minimum members
setarray .@claimerlist$[0],"null";
set .@resultcount,query_sql("SELECT `name` FROM `guild_member` WHERE `guild_id` = '"+getcharid(2)+"'",.@claimerlist$);
if( .@resultcount < .@mm ){
mes "Should have Total of "+.@mm +" members.";
close;
break;
}
// enforce IP check when code is not available
if( .@hascode == 0 ){
setarray .@iplist$[0],"null";
// same ip check
for( set .@i,0; .@i < .@resultcount; set .@i,.@i+1 ){
query_sql("SELECT `account_id` FROM `char` WHERE `name` = '"+.@claimerlist$[.@i]+"'",.@z);
query_sql("SELECT `last_ip` FROM `login` WHERE `account_id` = '"+.@z+"'",.@il$);
//check for duplicates
for( set .@j,0; .@j < .@i; set .@j,.@j+1 ){
if( .@il$ == .@iplist$[.@j] ){
mes "^FF0000 Duplicate IP Address^000000";
mes "^FF0000 NOTE:^000000 Each player should have different IP address";
mes "If you should not see this, Please report to admin";
close;
}
}
//add to list
setarray .@iplist$[.@i],.@il$;
}
}
for( set .@i,0; .@i < .@resultcount; set .@i,.@i+1 ){
//account check
query_sql("SELECT `account_id` FROM `char` WHERE `name` = '"+.@claimerlist$[.@i]+"'",.@x);
set .@haspack,query_sql("SELECT FROM `guild_package` WHERE `acc_id` = '"+.@x+"'");
//ip check
query_sql("SELECT `last_ip` FROM `login` WHERE `account_id` = '"+.@x+"'",.@xx);
set .@haspack,query_sql("SELECT FROM `guild_package` WHERE `claim_ip` = '"+.@xx+"'");
//character name check
set .@haspack3,query_sql("SELECT `char_name` FROM `guild_package` WHERE `char_name` = '"+.@claimerlist$[.@i]+"'");
if(.@haspack > 0 || .@haspack2 > 0 || .@haspack3 > 0){
mes "One or more in your member(s) has already received the package.";
close;
break;
}
}
// TODOs: check if master and all members are online
set .@onlinechk,query_sql("SELECT `name` FROM `guild_member` WHERE `guild_id` = '"+getcharid(2)+"' AND `online` = 0");
if( .@onlinechk > 0 ){
mes "Make sure all members are online";
close;
break;
}
for ( set .@j,0; .@j < .@resultcount; set .@j,.@j+1 ){
if( .@claimerlist$[.@j] == strcharinfo(0)){
for ( set .@i, 0; .@i < getarraysize(.@gmaster); set .@i, .@i + 2 )
getitem .@gmaster[.@i], .@gmaster[.@i+1];
}else{
for ( set .@i, 0; .@i < getarraysize(.@gmember); set .@i, .@i + 2 )
atcommand "#item "+.@claimerlist$[.@j]+" "+.@gmember[.@i]+" "+.@gmember[.@i+1]+"";
}
set .@acid,"null";
query_sql("SELECT `account_id` FROM `guild_member` WHERE `name` = '"+.@claimerlist$[.@j]+"'",.@acid);
query_sql("SELECT `last_ip` FROM `login` WHERE `account_id` = '"+.@acid+"'",.@c_ip$);
query_sql("SELECT `last_mac` FROM `login` WHERE `account_id` = '"+.@acid+"'",.@c_mac$);
query_sql("SELECT `last_cpu` FROM `login` WHERE `account_id` = '"+.@acid+"'",.@c_cpu$);
query_sql("SELECT `last_motherboard` FROM `login` WHERE `account_id` = '"+.@acid+"'",.@c_mb$);
query_sql("SELECT `char_id` FROM `char` WHERE `name` = '"+.@claimerlist$[.@j]+"'",.@mem_id);
query_sql "INSERT INTO `guild_package` (`acc_id`, `char_id`, `char_name`, `guild_id`, `guild_name`, `guild_master`, `claim_ip`, `claim_mac`, `claim_cpu`, `claim_motherboard`) VALUES ('"+.@acid+"','"+.@mem_id+"','"+.@claimerlist$[.@j]+"','"+getcharid(2)+"','"+strcharinfo(2)+"','"+strcharinfo(0)+"','"+.@c_ip$+"','"+.@c_mac$+"','"+.@c_cpu$+"','"+.@c_mb$+"')";
}
next;
mes "Package has been Distributed.";
close2;
query_sql("UPDATE `gpack_code` SET `guild_id` = '"+getcharid(2)+"', `status` = '1' WHERE `gcode` = '"+.@code$+"'");
announce "The Guild "+strcharinfo(2)+" has Signed Up for war",BC_ALL,0xFF0000;
break;
}
break;
}
switch(rand(1,4)){
case 1:
npctalk "Hey you noob, your turn";
sleep 1000;
npctalk "Oh you're not noob? Then prove it in WOE";
break;
case 2:
npctalk "Next!";
break;
case 3:
npctalk "NEXT NEXT NEXT, Move Faster";
break;
case 4:
npctalk "No more? Good.";
}
OnInit:
waitingroom "Claim Guild Package Here",0;
query_sql "CREATE TABLE IF NOT EXISTS `guild_package` ( `acc_id` INT NOT NULL UNIQUE, `char_id` INT NOT NULL, `char_name` TEXT NOT NULL, `guild_id` INT NOT NULL, `guild_name` TEXT NOT NULL, `guild_master` TEXT NOT NULL, `claim_ip` TEXT NOT NULL, `claim_mac` TEXT NOT NULL, `claim_cpu` TEXT NOT NULL, `claim_motherboard` TEXT NOT NULL ) ENGINE=MyISAM";
query_sql "CREATE TABLE IF NOT EXISTS `gpack_code` (`guild_id` INT NOT NULL, `gcode` VARCHAR(10) NOT NULL, `status` INT NOT NULL ) ENGINE=MyISAM";
end;
}