Hello, I'm using the author's script @Louis T Steinhil, I made a change to get more effects, I came across a problem, the bonus that the NPC gives lasts a few minutes, I would like it to last 7 days or be permanent, can anyone help me? NOTE: I already tried via chatgpt and was unsuccessful.
//============================================================
//===== rAthena Script =======================================
//= Card Collection Quest NPC
//= By: Louis T Steinhil
//= Mostly ChatGPT v 1.0
//= v1.1 Added Alias Name to bonuses for better readability.
//= v1.2 Added Cards submission even if the player doesn't
//= have the right amount it will still submit regardless.
//= v1.3 Initialization and resetting of arrays and variables:
//= Ensure that arrays and variables are properly initialized
//= and reset to avoid data from previous iterations.
//= Avoiding nested loops with the same loop counter:
//= The loop counter for the outer and inner loops should be
//= different to prevent conflicts.
//= v1.4 Rearranged for better readability. Replaced getiteminfo
//= on submit with getitemname.
//============================================================
yuno_in02,93,207,5 script Card Album 4_ENERGY_WHITE,{
switch (select("Start Card Collection:Reset:Cancel")) {
case 1: // Main GM OPTION
// Main GM OPTION
if (!getd("card_list")) {
// Define the fixed number of cards to collect
set .@num_cards_to_select, 5;
// Display the card collection quest dialogue
mes "[Card Collection NPC]";
mes "Welcome to the Card Collection Quest!";
mes "Please submit the following [ " + .@num_cards_to_select + " ] different card/s to receive rewards.";
next;
mes "You must collect the following cards:";
// Fetch random card IDs for the collection
if (checkre(0)) {
.@mob_db$ = "mob_db_re";
.@item_db$ = "item_db_re";
} else {
.@mob_db$ = "mob_db";
.@item_db$ = "item_db";
}
freeloop 1;
for (set .@i, 0; .@i < .@num_cards_to_select; set .@i, .@i + 1) {
.@string$ = "( `name_aegis` IN ( SELECT DISTINCT `drop1_item` FROM `" + .@mob_db$ + "` ) " +
"OR `name_aegis` IN ( SELECT DISTINCT `drop2_item` FROM `" + .@mob_db$ + "` ) " +
"OR `name_aegis` IN ( SELECT DISTINCT `drop3_item` FROM `" + .@mob_db$ + "` ) " +
"OR `name_aegis` IN ( SELECT DISTINCT `drop4_item` FROM `" + .@mob_db$ + "` ) " +
"OR `name_aegis` IN ( SELECT DISTINCT `drop5_item` FROM `" + .@mob_db$ + "` ) " +
"OR `name_aegis` IN ( SELECT DISTINCT `drop6_item` FROM `" + .@mob_db$ + "` ) " +
"OR `name_aegis` IN ( SELECT DISTINCT `drop7_item` FROM `" + .@mob_db$ + "` ) " +
"OR `name_aegis` IN ( SELECT DISTINCT `drop8_item` FROM `" + .@mob_db$ + "` ) " +
"OR `name_aegis` IN ( SELECT DISTINCT `drop9_item` FROM `" + .@mob_db$ + "` ) " +
"OR `name_aegis` IN ( SELECT DISTINCT `drop10_item` FROM `" + .@mob_db$ + "` ) )";
.@sql_query$ = "SELECT DISTINCT `id` FROM `" + .@item_db$ + "` WHERE `type` = 'Card' AND " + .@string$ + " ORDER BY RAND()";
.@nb = query_sql(.@sql_query$, .@id[0]);
freeloop 0;
if (.@nb < 1) {
mes "[Card Collection NPC]";
mes "There are not enough valid cards in the database.";
close;
}
// Find a valid card that is not an enchant card
for ( .@j = 0; .@j < .@nb; .@j++ ) {
if (getiteminfo(.@id[.@j], ITEMINFO_SUBTYPE) != CARD_ENCHANT) {
// Save the card ID
setd("Card" + .@i, .@id[.@j]);
break; // Exit the loop once a valid card is found
}
}
// Check if all cards fetched are enchant cards
if (.@j >= .@nb) {
mes "[Card Collection NPC]";
mes "There are not enough valid cards in the database.";
close;
}
// Generate a random number of cards to collect (between 1 and 10)
set .@cards_to_collect, rand(1, 10);
setd("Card" + .@i + "_", 0);
setd("Collect" + .@i + "_", .@cards_to_collect);
}
// Clear the array for generating bonuses
deletearray .@j[0], getarraysize(.@j);
deletearray .@used_bonus_index[0], getarraysize(.@used_bonus_index);
// Generate bonus array with bonus strings
setarray .@bonus_string$,
"bonus bStr,", "bonus bAgi,", "bonus bVit,", "bonus bInt,", "bonus bDex,", "bonus bLuk,", // Atributos
"bonus bCritical,", "bonus bFlee,", "bonus bHit,", "bonus bMaxHPrate,", "bonus bMaxSPrate,", // Crítico, esquiva, precisão, HP/SP
"bonus2 bAddRace,RC_Human,", "bonus bAtkRate,"; // Dano contra humanóides e dano físico geral
// Generate corresponding alias array
setarray .@bonus_alias$,
"Str +", "Agi +", "Vit +", "Int +", "Dex +", "Luk +", // Atributos
"Critical +", "Flee +", "Hit +", "Max HP% +", "Max SP% +", // Outros bônus
"Damage vs Human +", "Atk % +"; // Dano adicional
setarray .@used_bonus_index[0], false, false, false, false, false, false,
false, false, false, false, false, false, false;
// Display submitted cards and their statuses
for (set .@i, 0; .@i < .@num_cards_to_select; set .@i, .@i + 1) {
do {
set .@random_bonus_index, rand(0, getarraysize(.@bonus_string$) - 1);
} while (.@used_bonus_index[.@random_bonus_index]);
set .@used_bonus_index[.@random_bonus_index], true;
set .@random_number_bonus, rand(1, 10);
// Store the generated bonus and its value
setd("Bonus" + .@i + "_String$", .@bonus_string$[.@random_bonus_index]);
setd("Bonus" + .@i + "_Alias$", .@bonus_alias$[.@random_bonus_index]);
setd("Bonus" + .@i + "_Value", .@random_number_bonus);
.@j[.@i] = getd("Card" + .@i);
mes "(" + getd("Card" + .@i + "_") + " / " + getd("Collect" + .@i + "_") + ") - " + mesitemlink(.@j[.@i]);
mes "> Deposit Reward: " + getd("Bonus" + .@i + "_Alias$") + " " + .@random_number_bonus;
dispbottom("(" + getd("Card" + .@i + "_") + " / " + getd("Collect" + .@i + "_") + ") - " + itemlink(.@j[.@i]) + " > Deposit Reward: " + getd("Bonus" + .@i + "_Alias$") + " " + .@random_number_bonus);
}
// Set the card list flag
setd("card_list", 1);
close;
} else {
// Display regular options for starting the card collection or choosing "No"
switch (select("See List:Submit Cards:Retrieve Card/s:Cancel")) {
case 1: // See List
// Check if bonuses have been generated before
mes "[Card Collection NPC]";
mes "Here are your previously generated cards list & bonuses:";
for (set .@i, 0; .@i < 5; set .@i, .@i + 1) {
// Clear the array
deletearray .@j[0], getarraysize(.@j);
set .@bonus_alias$, getd("Bonus" + .@i + "_Alias$");
set .@bonus_value, getd("Bonus" + .@i + "_Value");
// Display submitted cards and their statuses
.@j[.@i] = getd("Card" + .@i);
mes "(" + getd("Card" + .@i + "_") + " / " + getd("Collect" + .@i + "_") + ") - " + mesitemlink(.@j[.@i]);
mes "> Deposit Reward: " + getd("Bonus" + .@i + "_Alias$") + " " + .@random_number_bonus;
dispbottom("(" + getd("Card" + .@i + "_") + " / " + getd("Collect" + .@i + "_") + ") - " + itemlink(.@j[.@i]) + " > Deposit Reward: " + getd("Bonus" + .@i + "_Alias$") + " " + .@random_number_bonus);
.@j[5] = .@j[5] + getiteminfo(.@j[.@i], ITEMINFO_AEGISNAME);
}
close;
break;
case 2: // Submit Cards
// Initialize the menu string
set .@menu$, "";
// Loop through the list of card IDs to populate the menu
for (set .@i, 0; .@i < 5; set .@i, .@i + 1) {
// Get the card name using its ID
set .@card_name$, getitemname(getd("Card" + .@i));
// Get the submission count using dedicated variable
set .@submission_count, getd("Card" + .@i + "_");
// Retrieve the required number of cards to collect for the chosen slot
set .@required_cards, getd("Collect" + .@i + "_");
// Determine the submission status of the card
set .@submission_status$, " (" + .@submission_count + " / " + .@required_cards + ")";
// Append the card name and submission status to the menu string
.@menu$ += .@submission_status$ + " - " +.@card_name$ + ":";
}
mes "[Card Collection NPC]";
mes "Which card would you like to submit?";
// Display the menu and handle player selection
set .@selection, select(.@menu$) - 1;
set .@selectedCardId, getd("Card" + .@selection);
// Retrieve the submission count
set .@submission_count, getd("Card" + .@selection + "_");
// Retrieve the required number of cards to collect for the chosen slot
set .@required_cards, getd("Collect" + .@selection + "_");
// Calculate the number of cards to submit
set .@cards_needed, .@required_cards - .@submission_count;
// Get the player's inventory
getinventorylist;
// Check if the player has the selected card in their inventory
set .@player_card_count, 0;
for(set .@j, 0; .@j < @inventorylist_count; set .@j, .@j + 1) {
if(@inventorylist_id[.@j] == .@selectedCardId) {
set .@player_card_count, @inventorylist_amount[.@j];
break;
}
}
// If player has no cards, inform and exit
if (.@player_card_count == 0) {
mes "[Card Collection NPC]";
mes "You do not have any of this card.";
close;
}
// Calculate the actual number of cards to submit (up to the needed amount)
set .@cards_to_submit, min(.@cards_needed, .@player_card_count);
// Update submission count
setd("Card" + .@selection + "_", .@submission_count + .@cards_to_submit);
// Remove the cards from the player's inventory
delitem .@selectedCardId, .@cards_to_submit;
mes "[Card Collection NPC]";
mes "Card submitted successfully!";
// If the card collection is complete for this card, apply the bonus
if (getd("Card" + .@selection + "_") >= getd("Collect" + .@selection + "_")) {
// Retrieve the stored bonus and its value
set .@bonus_string$, getd("Bonus" + .@selection + "_String$");
set .@bonus_alias$, getd("Bonus" + .@selection + "_Alias$");
set .@bonus_value, getd("Bonus" + .@selection + "_Value");
// Apply bonus
bonus_script(.@bonus_string$ + .@bonus_value + ";", 512);
// Display the bonus received
mes "[Bonus " + (.@selection + 1) + "]: " + .@bonus_alias$ + " " + .@bonus_value;
}
close;
break;
case 3: // Retrieve Cards
// Check if any cards have been submitted
set .@cards_submitted, 0;
for (set .@i, 0; .@i < 5; set .@i, .@i + 1) {
if (getd("Card" + .@i + "_") == getd("Card" + .@i + "_")) {
set .@cards_submitted, .@cards_submitted + 1;
}
}
if (.@cards_submitted == 0) {
mes "[Card Collection NPC]";
mes "You haven't submitted any cards yet.";
close;
}
// Check if the player has already started the card collection
if (getd("card_list") == 1) {
mes "[Card Collection NPC]";
mes "^FF0000Warning: Retrieving cards will reset the card/s submitted and revoke any bonuses generated.^000000";
next;
}
// Retrieve submitted cards for 1 million zeny
if (Zeny < 1000000) {
mes "[Card Collection NPC]";
mes "You need 1,000,000 Zeny to retrieve the cards.";
close;
}
// Deduct 1 million zeny
set Zeny, Zeny - 1000000;
// Neutralize the granted bonuses
for (set .@i, 0; .@i < 5; set .@i, .@i + 1) {
if (getd("Card" + .@i + "_") == getd("Card" + .@i + "_")) {
// Retrieve the stored bonus and its value
set .@bonus_string$, getd("Bonus" + .@i + "_String$");
set .@bonus_value, getd("Bonus" + .@i + "_Value");
// Apply reverse bonus to neutralize the effect
//bonus_script(.@bonus_string$ + (-.@bonus_value) + ";", 512); //bugged stats won't be applied on the second try
bonus_script_clear 1;
}
}
// Return the cards to the player
for (set .@i, 0; .@i < 5; set .@i, .@i + 1) {
if (getd("Card" + .@i + "_") == getd("Card" + .@i + "_")) {
getitem getd("Card" + .@i), getd("Card" + .@i + "_");
setd("Card" + .@i + "_", 0);
}
}
mes "[Card Collection NPC]";
mes "You have retrieved your submitted cards and your bonus has been neutralized.";
close;
break;
default:
mes "[Card Collection NPC]";
mes "Alright, have a great day!";
close;
break;
}
}
case 2:
// Check if the player has enough Zeny
if (zeny < 5000000) {
mes "[Card Collection NPC]";
mes "You don't have enough Zeny to restart the card collection.";
close;
} else {
mes "[Card Collection NPC]";
mes "^FF0000Are you sure you want to restart the card collection? This action will deduct 5 million Zeny from your account^000000";
mes "^FF0000and the submitted card will be gone forever!^000000";
switch (select("Yes:No")) {
case 1:
// Deduct 5 million Zeny from the player
zeny -= 5000000;
// Start Card Collection again
setd("card_list", 0);
// Reset the flag to allow new bonuses to be generated
set .BonusesGenerated, 0;
next;
mes "[Card Collection NPC]";
mes "Card list and Bonus Stats have been reset. 5 million Zeny has been deducted from your account.";
close;
break;
case 2:
mes "[Card Collection NPC]";
mes "Card collection reset cancelled.";
close;
break;
}
}
break;
default:
mes "[Card Collection NPC]";
mes "Alright, have a great day!";
close;
break;
}
OnInit:
setunitdata( getnpcid(0), UNPC_GROUP_ID,6 );
setunittitle( getnpcid(0), "Universal" );
end;
}
Question
xflavio
Hello, I'm using the author's script @Louis T Steinhil, I made a change to get more effects, I came across a problem, the bonus that the NPC gives lasts a few minutes, I would like it to last 7 days or be permanent, can anyone help me? NOTE: I already tried via chatgpt and was unsuccessful.
//============================================================ //===== rAthena Script ======================================= //= Card Collection Quest NPC //= By: Louis T Steinhil //= Mostly ChatGPT v 1.0 //= v1.1 Added Alias Name to bonuses for better readability. //= v1.2 Added Cards submission even if the player doesn't //= have the right amount it will still submit regardless. //= v1.3 Initialization and resetting of arrays and variables: //= Ensure that arrays and variables are properly initialized //= and reset to avoid data from previous iterations. //= Avoiding nested loops with the same loop counter: //= The loop counter for the outer and inner loops should be //= different to prevent conflicts. //= v1.4 Rearranged for better readability. Replaced getiteminfo //= on submit with getitemname. //============================================================ yuno_in02,93,207,5 script Card Album 4_ENERGY_WHITE,{ switch (select("Start Card Collection:Reset:Cancel")) { case 1: // Main GM OPTION // Main GM OPTION if (!getd("card_list")) { // Define the fixed number of cards to collect set .@num_cards_to_select, 5; // Display the card collection quest dialogue mes "[Card Collection NPC]"; mes "Welcome to the Card Collection Quest!"; mes "Please submit the following [ " + .@num_cards_to_select + " ] different card/s to receive rewards."; next; mes "You must collect the following cards:"; // Fetch random card IDs for the collection if (checkre(0)) { .@mob_db$ = "mob_db_re"; .@item_db$ = "item_db_re"; } else { .@mob_db$ = "mob_db"; .@item_db$ = "item_db"; } freeloop 1; for (set .@i, 0; .@i < .@num_cards_to_select; set .@i, .@i + 1) { .@string$ = "( `name_aegis` IN ( SELECT DISTINCT `drop1_item` FROM `" + .@mob_db$ + "` ) " + "OR `name_aegis` IN ( SELECT DISTINCT `drop2_item` FROM `" + .@mob_db$ + "` ) " + "OR `name_aegis` IN ( SELECT DISTINCT `drop3_item` FROM `" + .@mob_db$ + "` ) " + "OR `name_aegis` IN ( SELECT DISTINCT `drop4_item` FROM `" + .@mob_db$ + "` ) " + "OR `name_aegis` IN ( SELECT DISTINCT `drop5_item` FROM `" + .@mob_db$ + "` ) " + "OR `name_aegis` IN ( SELECT DISTINCT `drop6_item` FROM `" + .@mob_db$ + "` ) " + "OR `name_aegis` IN ( SELECT DISTINCT `drop7_item` FROM `" + .@mob_db$ + "` ) " + "OR `name_aegis` IN ( SELECT DISTINCT `drop8_item` FROM `" + .@mob_db$ + "` ) " + "OR `name_aegis` IN ( SELECT DISTINCT `drop9_item` FROM `" + .@mob_db$ + "` ) " + "OR `name_aegis` IN ( SELECT DISTINCT `drop10_item` FROM `" + .@mob_db$ + "` ) )"; .@sql_query$ = "SELECT DISTINCT `id` FROM `" + .@item_db$ + "` WHERE `type` = 'Card' AND " + .@string$ + " ORDER BY RAND()"; .@nb = query_sql(.@sql_query$, .@id[0]); freeloop 0; if (.@nb < 1) { mes "[Card Collection NPC]"; mes "There are not enough valid cards in the database."; close; } // Find a valid card that is not an enchant card for ( .@j = 0; .@j < .@nb; .@j++ ) { if (getiteminfo(.@id[.@j], ITEMINFO_SUBTYPE) != CARD_ENCHANT) { // Save the card ID setd("Card" + .@i, .@id[.@j]); break; // Exit the loop once a valid card is found } } // Check if all cards fetched are enchant cards if (.@j >= .@nb) { mes "[Card Collection NPC]"; mes "There are not enough valid cards in the database."; close; } // Generate a random number of cards to collect (between 1 and 10) set .@cards_to_collect, rand(1, 10); setd("Card" + .@i + "_", 0); setd("Collect" + .@i + "_", .@cards_to_collect); } // Clear the array for generating bonuses deletearray .@j[0], getarraysize(.@j); deletearray .@used_bonus_index[0], getarraysize(.@used_bonus_index); // Generate bonus array with bonus strings setarray .@bonus_string$, "bonus bStr,", "bonus bAgi,", "bonus bVit,", "bonus bInt,", "bonus bDex,", "bonus bLuk,", // Atributos "bonus bCritical,", "bonus bFlee,", "bonus bHit,", "bonus bMaxHPrate,", "bonus bMaxSPrate,", // Crítico, esquiva, precisão, HP/SP "bonus2 bAddRace,RC_Human,", "bonus bAtkRate,"; // Dano contra humanóides e dano físico geral // Generate corresponding alias array setarray .@bonus_alias$, "Str +", "Agi +", "Vit +", "Int +", "Dex +", "Luk +", // Atributos "Critical +", "Flee +", "Hit +", "Max HP% +", "Max SP% +", // Outros bônus "Damage vs Human +", "Atk % +"; // Dano adicional setarray .@used_bonus_index[0], false, false, false, false, false, false, false, false, false, false, false, false, false; // Display submitted cards and their statuses for (set .@i, 0; .@i < .@num_cards_to_select; set .@i, .@i + 1) { do { set .@random_bonus_index, rand(0, getarraysize(.@bonus_string$) - 1); } while (.@used_bonus_index[.@random_bonus_index]); set .@used_bonus_index[.@random_bonus_index], true; set .@random_number_bonus, rand(1, 10); // Store the generated bonus and its value setd("Bonus" + .@i + "_String$", .@bonus_string$[.@random_bonus_index]); setd("Bonus" + .@i + "_Alias$", .@bonus_alias$[.@random_bonus_index]); setd("Bonus" + .@i + "_Value", .@random_number_bonus); .@j[.@i] = getd("Card" + .@i); mes "(" + getd("Card" + .@i + "_") + " / " + getd("Collect" + .@i + "_") + ") - " + mesitemlink(.@j[.@i]); mes "> Deposit Reward: " + getd("Bonus" + .@i + "_Alias$") + " " + .@random_number_bonus; dispbottom("(" + getd("Card" + .@i + "_") + " / " + getd("Collect" + .@i + "_") + ") - " + itemlink(.@j[.@i]) + " > Deposit Reward: " + getd("Bonus" + .@i + "_Alias$") + " " + .@random_number_bonus); } // Set the card list flag setd("card_list", 1); close; } else { // Display regular options for starting the card collection or choosing "No" switch (select("See List:Submit Cards:Retrieve Card/s:Cancel")) { case 1: // See List // Check if bonuses have been generated before mes "[Card Collection NPC]"; mes "Here are your previously generated cards list & bonuses:"; for (set .@i, 0; .@i < 5; set .@i, .@i + 1) { // Clear the array deletearray .@j[0], getarraysize(.@j); set .@bonus_alias$, getd("Bonus" + .@i + "_Alias$"); set .@bonus_value, getd("Bonus" + .@i + "_Value"); // Display submitted cards and their statuses .@j[.@i] = getd("Card" + .@i); mes "(" + getd("Card" + .@i + "_") + " / " + getd("Collect" + .@i + "_") + ") - " + mesitemlink(.@j[.@i]); mes "> Deposit Reward: " + getd("Bonus" + .@i + "_Alias$") + " " + .@random_number_bonus; dispbottom("(" + getd("Card" + .@i + "_") + " / " + getd("Collect" + .@i + "_") + ") - " + itemlink(.@j[.@i]) + " > Deposit Reward: " + getd("Bonus" + .@i + "_Alias$") + " " + .@random_number_bonus); .@j[5] = .@j[5] + getiteminfo(.@j[.@i], ITEMINFO_AEGISNAME); } close; break; case 2: // Submit Cards // Initialize the menu string set .@menu$, ""; // Loop through the list of card IDs to populate the menu for (set .@i, 0; .@i < 5; set .@i, .@i + 1) { // Get the card name using its ID set .@card_name$, getitemname(getd("Card" + .@i)); // Get the submission count using dedicated variable set .@submission_count, getd("Card" + .@i + "_"); // Retrieve the required number of cards to collect for the chosen slot set .@required_cards, getd("Collect" + .@i + "_"); // Determine the submission status of the card set .@submission_status$, " (" + .@submission_count + " / " + .@required_cards + ")"; // Append the card name and submission status to the menu string .@menu$ += .@submission_status$ + " - " +.@card_name$ + ":"; } mes "[Card Collection NPC]"; mes "Which card would you like to submit?"; // Display the menu and handle player selection set .@selection, select(.@menu$) - 1; set .@selectedCardId, getd("Card" + .@selection); // Retrieve the submission count set .@submission_count, getd("Card" + .@selection + "_"); // Retrieve the required number of cards to collect for the chosen slot set .@required_cards, getd("Collect" + .@selection + "_"); // Calculate the number of cards to submit set .@cards_needed, .@required_cards - .@submission_count; // Get the player's inventory getinventorylist; // Check if the player has the selected card in their inventory set .@player_card_count, 0; for(set .@j, 0; .@j < @inventorylist_count; set .@j, .@j + 1) { if(@inventorylist_id[.@j] == .@selectedCardId) { set .@player_card_count, @inventorylist_amount[.@j]; break; } } // If player has no cards, inform and exit if (.@player_card_count == 0) { mes "[Card Collection NPC]"; mes "You do not have any of this card."; close; } // Calculate the actual number of cards to submit (up to the needed amount) set .@cards_to_submit, min(.@cards_needed, .@player_card_count); // Update submission count setd("Card" + .@selection + "_", .@submission_count + .@cards_to_submit); // Remove the cards from the player's inventory delitem .@selectedCardId, .@cards_to_submit; mes "[Card Collection NPC]"; mes "Card submitted successfully!"; // If the card collection is complete for this card, apply the bonus if (getd("Card" + .@selection + "_") >= getd("Collect" + .@selection + "_")) { // Retrieve the stored bonus and its value set .@bonus_string$, getd("Bonus" + .@selection + "_String$"); set .@bonus_alias$, getd("Bonus" + .@selection + "_Alias$"); set .@bonus_value, getd("Bonus" + .@selection + "_Value"); // Apply bonus bonus_script(.@bonus_string$ + .@bonus_value + ";", 512); // Display the bonus received mes "[Bonus " + (.@selection + 1) + "]: " + .@bonus_alias$ + " " + .@bonus_value; } close; break; case 3: // Retrieve Cards // Check if any cards have been submitted set .@cards_submitted, 0; for (set .@i, 0; .@i < 5; set .@i, .@i + 1) { if (getd("Card" + .@i + "_") == getd("Card" + .@i + "_")) { set .@cards_submitted, .@cards_submitted + 1; } } if (.@cards_submitted == 0) { mes "[Card Collection NPC]"; mes "You haven't submitted any cards yet."; close; } // Check if the player has already started the card collection if (getd("card_list") == 1) { mes "[Card Collection NPC]"; mes "^FF0000Warning: Retrieving cards will reset the card/s submitted and revoke any bonuses generated.^000000"; next; } // Retrieve submitted cards for 1 million zeny if (Zeny < 1000000) { mes "[Card Collection NPC]"; mes "You need 1,000,000 Zeny to retrieve the cards."; close; } // Deduct 1 million zeny set Zeny, Zeny - 1000000; // Neutralize the granted bonuses for (set .@i, 0; .@i < 5; set .@i, .@i + 1) { if (getd("Card" + .@i + "_") == getd("Card" + .@i + "_")) { // Retrieve the stored bonus and its value set .@bonus_string$, getd("Bonus" + .@i + "_String$"); set .@bonus_value, getd("Bonus" + .@i + "_Value"); // Apply reverse bonus to neutralize the effect //bonus_script(.@bonus_string$ + (-.@bonus_value) + ";", 512); //bugged stats won't be applied on the second try bonus_script_clear 1; } } // Return the cards to the player for (set .@i, 0; .@i < 5; set .@i, .@i + 1) { if (getd("Card" + .@i + "_") == getd("Card" + .@i + "_")) { getitem getd("Card" + .@i), getd("Card" + .@i + "_"); setd("Card" + .@i + "_", 0); } } mes "[Card Collection NPC]"; mes "You have retrieved your submitted cards and your bonus has been neutralized."; close; break; default: mes "[Card Collection NPC]"; mes "Alright, have a great day!"; close; break; } } case 2: // Check if the player has enough Zeny if (zeny < 5000000) { mes "[Card Collection NPC]"; mes "You don't have enough Zeny to restart the card collection."; close; } else { mes "[Card Collection NPC]"; mes "^FF0000Are you sure you want to restart the card collection? This action will deduct 5 million Zeny from your account^000000"; mes "^FF0000and the submitted card will be gone forever!^000000"; switch (select("Yes:No")) { case 1: // Deduct 5 million Zeny from the player zeny -= 5000000; // Start Card Collection again setd("card_list", 0); // Reset the flag to allow new bonuses to be generated set .BonusesGenerated, 0; next; mes "[Card Collection NPC]"; mes "Card list and Bonus Stats have been reset. 5 million Zeny has been deducted from your account."; close; break; case 2: mes "[Card Collection NPC]"; mes "Card collection reset cancelled."; close; break; } } break; default: mes "[Card Collection NPC]"; mes "Alright, have a great day!"; close; break; } OnInit: setunitdata( getnpcid(0), UNPC_GROUP_ID,6 ); setunittitle( getnpcid(0), "Universal" ); end; }
15 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.