// 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: jordanlacandula@hotmail.com // 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; }