Jump to content

Vengeance

Members
  • Posts

    65
  • Joined

  • Last visited

Posts posted by Vengeance

  1. The input variable has a number limit so instead of entering the zeny why not make like "How many bank notes do you want" this way it will give u the desired result you looking for

     case 2:
    next;
    mes @npcname$;
    mes "Please put in the amount of Notes you want.";
    next;
    input @noteamount;
    if (@noteamount <= 0) {
     mes @npcname$;
     mes "Again, the minimum amount of notes you can exchange is 1.";
      close;
    } else if (@noteamount*@banknoteprice > Zeny) {
     mes @npcname$;
     mes "I'm sorry but you lack Zeny to complete this transaction.";
     close;
    }
    next;
    set @pricea,@noteamount*@banknoteprice;
    set Zeny,Zeny-@pricea;
    getitem @banknoteid,@noteamount;
    mes @npcname$;
    mes "Transaction complete! Here are your Bank Notes.";
    break;
    

    Try this and it would work fine

  2. Jump To Who Sell

    This command searches for the cheapest seller and warps to him..

    /*==========================================
    * @jumptowhosell - warps to the cheapest shop.
    * Made by Vengence
    *------------------------------------------*/
    ACMD_FUNC(jumptowhosell)
    {
    char item_name[100];
    int item_id = 0, j, count = 0, sat_num = 0;
    int s_type = 1; // search bitmask: 0-name,1-id, 2-card, 4-refine
    int refine = 0,card_id = 0;
    bool flag = 0; // place dot on the minimap?
    struct map_session_data* pl_sd;
    struct s_mapiterator* iter;
    unsigned int MinPrice = battle_config.vending_max_value, MaxPrice = 0;
    struct item_data *item_data;
    
    nullpo_retr(-1, sd);
    
    if (!message || !*message) {
    clif_displaymessage(fd, "Use: @jtws (<+refine> )(<item_id>)(<[card_id]>) or @jtws <name>");
    return -1;
    }
    
    if (sscanf(message, "+%d %d[%d]", &refine, &item_id, &card_id) == 3){
    s_type = 1+2+4;
    }
    else if (sscanf(message, "+%d %d", &refine, &item_id) == 2){
    s_type = 1+4;
    }
    else if (sscanf(message, "+%d [%d]", &refine, &card_id) == 2){
    s_type = 2+4;
    }
    else if (sscanf(message, "%d[%d]", &item_id, &card_id) == 2){
    s_type = 1+2;
    }
    else if (sscanf(message, "[%d]", &card_id) == 1){
    s_type = 2;
    }
    else if (sscanf(message, "+%d", &refine) == 1){
    s_type = 4;
    }
    else if (sscanf(message, "%d", &item_id) == 1 && item_id == atoi(message)){
    //names, that start on num are not working
    //so implemented minumum item_id>500
    //or better make item_id == atoi(message) ?
    s_type = 1;
    }
    else if (sscanf(message, "%99[^\n]", item_name) == 1){
    s_type = 1;
    if ((item_data = itemdb_searchname(item_name)) == NULL){
    clif_displaymessage(fd, "Not found item with this name");
    return -1;
    }
    item_id = item_data->nameid;
    }
    else {
    clif_displaymessage(fd, "Use: @jtws (<+refine> )(<item_id>)(<[card_id]>) or @jtws <name>");
    return -1;
    }
    
    
    //check card
    if(s_type & 2 && ((item_data = itemdb_exists(card_id)) == NULL || item_data->type != IT_CARD)){
    clif_displaymessage(fd, "Not found a card with than ID");
    return -1;
    }
    //check item
    if(s_type & 1 && (item_data = itemdb_exists(item_id)) == NULL){
    clif_displaymessage(fd, "Not found an item with than ID");
    return -1;
    }
    //check refine
    if(s_type & 4){
    if (refine<0 || refine>10){
    clif_displaymessage(fd, "Refine out of bounds: 0 - 10");
    return -1;
    }
    /*if(item_data->type != IT_WEAPON && item_data->type != IT_ARMOR){
    clif_displaymessage(fd, "Use refine only with weapon or armor");
    return -1;
    }*/
    }
    
    iter = mapit_getallusers();
    for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
    {
    if( pl_sd->vender_id ) //check if player is vending
    {
    for (j = 0; j < pl_sd->vend_num; j++) {
    if(pl_sd->vending[j].value < MinPrice) MinPrice = pl_sd->vending[j].value;
    if(pl_sd->vending[j].value > MaxPrice) MaxPrice = pl_sd->vending[j].value;
    count++;
    flag = 1;
    }
    if(flag && pl_sd->mapindex == sd->mapindex){
    flag = 0;
    }
    }
    }
    mapit_free(iter);
    
    if(count > 0) {
    iter = mapit_getallusers();
    for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
    {
    if( pl_sd->vender_id ) //check if player is vending
    {
    for (j = 0; j < pl_sd->vend_num; j++) {
    if(pl_sd->vending[j].value == MinPrice)
    {
    pc_setpos(sd, pl_sd->mapindex, pl_sd->bl.x, pl_sd->bl.y, 3);
    snprintf(atcmd_output,CHAT_SIZE_MAX, "Warped to %s", pl_sd->status.name);
    clif_displaymessage(fd, atcmd_output);
    }
    }
    }
    }
    } else
    clif_displaymessage(fd, "Nobody is selling it now.");
    
    return 0;
    }

    and search for in atcommand.c

     { "font",    1,1,   atcommand_font },

    and below it add

     { "jtws",    1,99,  atcommand_jumptowhosell }, //[Vengence]

    This is just a modification of the whosell command so the credit also goes to the creator of the whosell command.

    command_jtws.patch

  3. <?xml version="1.0" encoding="euc-kr" ?>
    <clientinfo>
    <servicetype>korea</servicetype>
    <servertype>sakray</servertype>
      <connection>
      <display>Realm Ragnarok Online</display>
      <balloon>Welcome To RealmRO</balloon>
      <desc>50x/50x/Unique</desc>
      <address>68.193.249.82</address>
      <port>6900</port>
      <version>25</version>
      <langtype>8</langtype>
      <registrationweb>_m/_f</registrationweb>
      <aid>
    	 <admin>2000000</admin>
      </aid>
      </connection>
    </clientinfo>
    

    try this

  4. could you post the clientinfo.xml or the sclientinfo.xml so that we can know if you have made the clientinfo file with correct IP and all

    also can u make sure you have entered the correct date of the client in mmo.h and then changed the packet_db_ver to default in packet_db.txt and after which you have compiled your server (ONly if you edit in mmo.h no need to compile if you edit in packet_db.txt)

  5. ru sure you put up the spr and act files in the proper locations...6 files in the sprites folder

    under datasprite¾Ç¼¼»Ç¸®¿©

    1.¿©_item.spr

    2.¿©_item.act

    under datasprite¾Ç¼¼»Ç¸®³²

    1.³²_item.spr

    2.³²_item.act

    These are the equip sprites for male and female char's

    And then the drop sprites

    under datasprite¾ÆÀÌÅÛ

    1.item.spr

    2.item.act

  6. Hi guys i made this simple modification to stop corruption in my server...

    This little snippet would allow you to stop GMs from abusing @monster command.. it will announce the Monster name, Amount and also the location with the GM name so its very easy to know if it was for an Purpose or just for abuse.... :(

    /*==========================================
    *
    *------------------------------------------*/
    ACMD_FUNC(monster)
    {
    char name[NAME_LENGTH];
    char monster[NAME_LENGTH];
    int mob_id;
    int number = 0;
    int count;
    int i, k, range;
    short mx, my;
    nullpo_retr(-1, sd);
    
    memset(name, '0', sizeof(name));
    memset(monster, '0', sizeof(monster));
    memset(atcmd_output, '0', sizeof(atcmd_output));
    
    if (!message || !*message) {
    clif_displaymessage(fd, msg_txt(80)); // Give the display name or monster name/id please.
    return -1;
    }
    if (sscanf(message, ""%23[^"]" %23s %d", name, monster, &number) > 1 ||
    sscanf(message, "%23s "%23[^"]" %d", monster, name, &number) > 1) {
    //All data can be left as it is.
    } else if ((count=sscanf(message, "%23s %d %23s", monster, &number, name)) > 1) {
    //Here, it is possible name was not given and we are using monster for it.
    if (count < 3) //Blank mob's name.
    name[0] = '0';
    } else if (sscanf(message, "%23s %23s %d", name, monster, &number) > 1) {
    //All data can be left as it is.
    } else if (sscanf(message, "%23s", monster) > 0) {
    //As before, name may be already filled.
    name[0] = '0';
    } else {
    clif_displaymessage(fd, msg_txt(80)); // Give a display name and monster name/id please.
    return -1;
    }
    
    if ((mob_id = mobdb_searchname(monster)) == 0) // check name first (to avoid possible name begining by a number)
    mob_id = mobdb_checkid(atoi(monster));
    
    if (mob_id == 0) {
    clif_displaymessage(fd, msg_txt(40)); // Invalid monster ID or name.
    return -1;
    }
    
    if (mob_id == MOBID_EMPERIUM) {
    clif_displaymessage(fd, msg_txt(83)); // Monster 'Emperium' cannot be spawned.
    return -1;
    }
    
    if (number <= 0)
    number = 1;
    
    if (strlen(name) < 1)
    strcpy(name, "--ja--");
    
    // If value of atcommand_spawn_quantity_limit directive is greater than or equal to 1 and quantity of monsters is greater than value of the directive
    if (battle_config.atc_spawn_quantity_limit && number > battle_config.atc_spawn_quantity_limit)
    number = battle_config.atc_spawn_quantity_limit;
    
    if (battle_config.etc_log)
    ShowInfo("%s monster='%s' name='%s' id=%d count=%d (%d,%d)n", command, monster, name, mob_id, number, sd->bl.x, sd->bl.y);
    
    count = 0;
    range = (int)sqrt((float)number) +2; // calculation of an odd number (+ 4 area around)
    for (i = 0; i < number; i++) {
    map_search_freecell(&sd->bl, 0, &mx,  &my, range, range, 0);
    k = mob_once_spawn(sd, sd->bl.m, mx, my, name, mob_id, 1, "");
    count += (k != 0) ? 1 : 0;
    }
    
    if (count != 0)
    if (number == count){
    if(pc_isGM(sd)==99){ // Checks if the GM level is below 99 Announcement is made [Vengeance]
    clif_displaymessage(fd, msg_txt(39)); // All monster summoned!
    }
    else {
    sprintf(atcmd_output, "%s summoned %d %s in %s,%d,%d", sd->status.name,number, monster, mapindex_id2name(sd->mapindex), sd->bl.x, sd->bl.y);
    intif_broadcast(atcmd_output, strlen(atcmd_output) + 1, 0);
    clif_displaymessage(fd, msg_txt(39)); // All monster summoned!
    }
    }
    else {
    sprintf(atcmd_output, "%s summoned %d %s in %s,%d,%d", sd->status.name,number, monster, mapindex_id2name(sd->mapindex), sd->bl.x, sd->bl.y);
    intif_broadcast(atcmd_output, strlen(atcmd_output) + 1, 0);
    sprintf(atcmd_output, msg_txt(240), count); // %d monster(s) summoned!
    clif_displaymessage(fd, atcmd_output);
    }
    else {
    clif_displaymessage(fd, msg_txt(40)); // Invalid monster ID or name.
    return -1;
    }
    
    return 0;
    }
    
    // small monster spawning [Valaris]
    ACMD_FUNC(monstersmall)
    {
    char name[NAME_LENGTH] = "";
    char monster[NAME_LENGTH] = "";
    int mob_id = 0;
    int number = 0;
    int x = 0;
    int y = 0;
    int count;
    int i;
    
    nullpo_retr(-1, sd);
    
    if (!message || !*message) {
    clif_displaymessage(fd, "Give a monster name/id please.");
    return -1;
    }
    
    if (sscanf(message, ""%23[^"]" %23s %d %d %d", name, monster, &number, &x, &y) < 2 &&
    sscanf(message, "%23s "%23[^"]" %d %d %d", monster, name, &number, &x, &y) < 2 &&
    sscanf(message, "%23s %d %23s %d %d", monster, &number, name, &x, &y) < 1) {
    clif_displaymessage(fd, "Give a monster name/id please.");
    return -1;
    }
    
    // If monster identifier/name argument is a name
    if ((mob_id = mobdb_searchname(monster)) == 0) // check name first (to avoid possible name begining by a number)
    mob_id = atoi(monster);
    
    if (mob_id == 0) {
    clif_displaymessage(fd, msg_txt(40));
    return -1;
    }
    
    if (mob_id == MOBID_EMPERIUM) {
    clif_displaymessage(fd, msg_txt(83)); // Cannot spawn emperium
    return -1;
    }
    
    if (mobdb_checkid(mob_id) == 0) {
    clif_displaymessage(fd, "Invalid monster ID"); // Invalid Monster ID.
    return -1;
    }
    
    if (number <= 0)
    number = 1;
    
    if (strlen(name) < 1)
    strcpy(name, "--ja--");
    
    // If value of atcommand_spawn_quantity_limit directive is greater than or equal to 1 and quantity of monsters is greater than value of the directive
    if (battle_config.atc_spawn_quantity_limit >= 1 && number > battle_config.atc_spawn_quantity_limit)
    number = battle_config.atc_spawn_quantity_limit;
    
    count = 0;
    for (i = 0; i < number; i++) {
    int mx, my;
    if (x <= 0)
    mx = sd->bl.x + (rand() % 11 - 5);
    else
    mx = x;
    if (y <= 0)
    my = sd->bl.y + (rand() % 11 - 5);
    else
    my = y;
    count += (mob_once_spawn(sd, sd->bl.m, mx, my, name, mob_id, 1, "2") != 0) ? 1 : 0;
    }
    
    if (count != 0)
    {
    if(pc_isGM(sd)==99){// Checks if the GM level is below 99 Announcement is made [Vengeance]
    clif_displaymessage(fd, msg_txt(39)); // All monster summoned!
    }
    else{
    sprintf(atcmd_output, "%s summoned %d small %s in %s,%d,%d", sd->status.name, number, monster, mapindex_id2name(sd->mapindex), sd->bl.x, sd->bl.y);
    intif_broadcast(atcmd_output, strlen(atcmd_output) + 1, 0);
    clif_displaymessage(fd, msg_txt(39)); // Monster Summoned!!
    }
    }
    else
    clif_displaymessage(fd, msg_txt(40)); // Invalid Monster ID.
    
    return 0;
    }
    // big monster spawning [Valaris]
    ACMD_FUNC(monsterbig)
    {
    char name[NAME_LENGTH] = "";
    char monster[NAME_LENGTH] = "";
    int mob_id = 0;
    int number = 0;
    int x = 0;
    int y = 0;
    int count;
    int i;
    
    nullpo_retr(-1, sd);
    
    if (!message || !*message) {
    clif_displaymessage(fd, "Give a monster name/id please.");
    return -1;
    }
    
    if (sscanf(message, ""%23[^"]" %23s %d %d %d", name, monster, &number, &x, &y) < 2 &&
    sscanf(message, "%23s "%23[^"]" %d %d %d", monster, name, &number, &x, &y) < 2 &&
    sscanf(message, "%23s %d %23s %d %d", monster, &number, name, &x, &y) < 1) {
    clif_displaymessage(fd, "Give a monster name/id please.");
    return -1;
    }
    
    // If monster identifier/name argument is a name
    if ((mob_id = mobdb_searchname(monster)) == 0) // check name first (to avoid possible name begining by a number)
    mob_id = atoi(monster);
    
    if (mob_id == 0) {
    clif_displaymessage(fd, msg_txt(40));
    return -1;
    }
    
    if (mob_id == MOBID_EMPERIUM) {
    clif_displaymessage(fd, msg_txt(83)); // Cannot spawn emperium
    return -1;
    }
    
    if (mobdb_checkid(mob_id) == 0) {
    clif_displaymessage(fd, "Invalid monster ID"); // Invalid Monster ID.
    return -1;
    }
    
    if (number <= 0)
    number = 1;
    
    if (strlen(name) < 1)
    strcpy(name, "--ja--");
    
    // If value of atcommand_spawn_quantity_limit directive is greater than or equal to 1 and quantity of monsters is greater than value of the directive
    if (battle_config.atc_spawn_quantity_limit >= 1 && number > battle_config.atc_spawn_quantity_limit)
    number = battle_config.atc_spawn_quantity_limit;
    
    count = 0;
    for (i = 0; i < number; i++) {
    int mx, my;
    if (x <= 0)
    mx = sd->bl.x + (rand() % 11 - 5);
    else
    mx = x;
    if (y <= 0)
    my = sd->bl.y + (rand() % 11 - 5);
    else
    my = y;
    count += (mob_once_spawn(sd, sd->bl.m, mx, my, name, mob_id, 1, "4") != 0) ? 1 : 0;
    }
    
    if (count != 0)
    {
    if(pc_isGM(sd)==99){// Checks if the GM level is below 99 Announcement is made [Vengeance]
    clif_displaymessage(fd, msg_txt(39)); // All monster summoned!
    }
    else{
    sprintf(atcmd_output, "%s summoned %d big %s in %s,%d,%d", sd->status.name, number, monster, mapindex_id2name(sd->mapindex), sd->bl.x, sd->bl.y);
    intif_broadcast(atcmd_output, strlen(atcmd_output) + 1, 0);
    clif_displaymessage(fd, msg_txt(39)); // Monster Summoned!!
    }
    }
    else
    clif_displaymessage(fd, msg_txt(40)); // Invalid Monster ID.
    
    return 0;
    }

    Just copy paste this Snippet.

    Download from here

    • Upvote 5
  7. Map of the week

     

    //===== rAthena Script ======================================================================
    //= Map Of The Week v4.4
    //===== Original By =========================================================================
    //= Kaushik
    //===== Current Version: ====================================================================
    //= 1.0 - Script Release.
    //= 1.1 - Added GM selection of Map Of The Week.
    //= 1.2 - Fixed Timer Selection of the Map is on Sunday @ 24:00 server time.
    //= 2.0 - Added Contract System.
    //= 2.1 - Fixed Contract Expiry (Set #MOTWC to 0 once contract is expired).
    //= 2.2 - Cleaned Script to remove some unneeded repertition and script. [ToastOfDoom]
    //= 2.3 - Added Bottle Grenade ingredients to the script as it was missed.
    //= 2.4 - Decreased the drop rate.
    //= 2.5 - Changed announce and dispbottom.
    //= 3.0 - Added Whisper Functions. (map, kills, contract, gm).
    //= 3.1 - Changed to dynamic Cost and Kills - @motwcost & @motwkill to your desired numbers.
    //= 3.2 - Added Menu To The NPC.
    //= 4.0 - Added GM commands to change random map, selected map & to Destroy all contracts.
    //= 4.1 - Removed SQL unwanted variable.
    //= 4.2 - Fixed script contract count variable.
    //= 4.3 - Fixed tweet to not give out contract if no map of the week is assigned.
    //= 4.4 - Fixed NPC Whisper
    //= 5.0 - Changed rewards to dynamic rewards [WIP].
    //===== Compatible With: ====================================================================
    //= Tested in SQL Revision 14435
    //===== Description: ========================================================================
    //= A Random Map Will be selected and edp, acid demo bottle ingredients are rewarded.
    //===========================================================================================



    Features

    • Selects a map every week in Prontera, Payon and Morroc Fields[Completed]
    • Rewards given when killed a monster[Completed]
    • Contract System[Completed]
    • Limited Kills[Completed]
    • Wisper System [Complete]
    • Easy configuration of the Script[Complete]
    • GM Commands[Complete]
    • Changes Map Automatically Every Week[Completed]
    • Rewards Can be set as required[Completed]
    • Fun Unlimited[Completed]

    About:
    This script works like this after it selects a map by itself ( can change the time to test in the script search for OnClock) this map becomes map of the week and when u kill any monster in this map on random chances you get a reward which is also set in the script.

    Also there is a special function in this script it doesnt work for everyone a player has to first sign the Contract i.e he has to pay 200000Zeny for killing 10000 Monsters i.e after he kills 10000 monsters he wont be able to get any kind of rewards from that Map which is map of the week and it will be a normal map..

    So if he needs to get rewards again he has to buy the contract again.
    Give reviews to motivate smile.pngsmile.png


    motw_v4.4.txt

    motw_v4.1.txt

    motw_v4.2.txt

    • Upvote 6
  8. try out here www.freaksol.com its a cheap webhosting where FluxCP and Ceres both works It had 30 day free trial I dunno if it still exists but give a try for the Basic Plan when you use the coupon code FRBAS30 you get the first month free

    for RO can use www.freaksol.com I have tested and the CPs works perfect without any issue...

×
×
  • Create New...