Jump to content

Onairda

Members
  • Posts

    167
  • Joined

  • Last visited

Posts posted by Onairda

  1. EDITED: Working now!, Forgot to removed the hashtag before the word 'Body' #Body


    db/import/mob_avail.txt

    Take note: Mob name should always CAPITAL Character to work. 

    Body:
      # Examples
      - Mob: PORING
        Sprite: BAPHOMET

     

  2. Hello,

    Can someone help me to edit this script to only count 1 hour and 20 minutes then refresh again to 1 hour and 20 minutes:

    because I have an event that starts every 1 hour and 20 minutes.  

     

    prontera,150,150,5	script	HourTimer	111,{
    OnInit:
    while( .@a != 1 ){
    	delwaitingroom;
    	waitingroom ""+gettimestr( "%H:%M:%S %p",15),0;
    	sleep 1000;
    }
    end;
    
    }

     

  3. Hello

     

    Good day!

     

    I am planning to create a Global function that will be used by different NPCs at the same time, and this Global function requires the variable. please see the below.

    I have an Idea in C#, but not sure how this will work with Rathena

    //------------------------

    Test.txt - SCript

    Prontera,150,150  - - - -{


    mes "Input  1st Number:";

    input .@FirstNumber;

    next;


    mes "Input  2nd Number:";

    input .@SecondNumber;

    .@total = callfunc add_numbers(.@FirstNumber, .@secondNumber)

    }

     

    //------------------------

    GlobalFunc.txt - Script

    GLOBAL function add_numbers(a, b)

     result = a + b

    query_sql(Insert result to addition_tbl) 

    return result

    end
     

  4. 20 hours ago, Botaring said:

    May I ask how did you make your webserver work?

    What type of program do you use to diff HTTP Emblem? I use warp and it doesn't have that on 2021-11-03

    I change my exe to 2020 that supports HTTP emblem, then thats it. 

    I used NEMO by the way.

     

     

  5. On 12/4/2020 at 11:10 PM, Ai4rei said:

    Create a thread in a DLL, that displays a topmost window with a bitmap in it and close it when the main window is created (which can be detected in various ways, for example polling with FindWindow). That DLL must be added to client's imports (or recycle an existing one if you know how).


    Edit:

    For example like this: https://github.com/ai4rei/splash

     

    On 12/5/2020 at 2:58 AM, Froost said:

    Hello sorry for the long response :D.

    I tried creating a custom DLL. However, I don't know how to load it using use custom DLL in NEMO, maybe you can help me? I tried loading in the DLL I've created but not working 
    image.png.e3470b57bd6d8830e5493069505a7f87.png

    image.png.5b172abaad98a35361dc873cd100d447.png

    Here is the error:

    image.thumb.png.9770553f8ea65b45732387fa66499e5a.png

    bump thank you

    done it using Visual Studio.  Thank you!

  6. My Webserv.bat is working and no error. However, it don't know where to place the emblem folder and the emblem's.

    Im using 2019 client will it work?

     

    On 9/19/2023 at 2:52 PM, Botaring said:

    It's just this, sir:
     

    web_port: 8888

     

    Mine has been solved. its working fine now :).

    You need to diff HTTP Emblem - before it works.

  7. Hello 🙂

    I've noticed that the latest rathena git have web-server.bat, I am just think how to enable this so I can use GIF emblem? and also is this fit to work with 2019-06.05f clients?

    Thank you so much

     

  8. 7 hours ago, AceofSpades said:

    then learn how to apply the queryl_sql guide here, you need to learn and understand how to apply it on your npc

    hahaha, thanks for replying 😄. but this is not what i asked 😄.

     

    5 hours ago, Winterfox said:

    If you have logging enabled, you can check the picklog table for rows where type is S.

    // 0x00000010 - (S) Log NPC transactions (buy/sell)

    For details, check log_athena.conf. The logging part is directly at the beginning of the file.

    Thank you so much Winterfox, this what I need ❤️

  9. Do we have a table in the database where we can track all the bought and sold items in the NPC?

     

    I am talking for the whole NPC inside the Ragnarok.

     

    I don't need a custom script to manually insert it in the database I want the default NPC script used inside the game.

     

    like the tool dealer, if someone buys and sells items to the tool dealer it will be recorded.

     

     

    thank you

     

     

     

     

  10. Hello Everyone,

    I was hoping if you could help me, to have the below script work. What I want is create a random generator code "Transaction Code" temporarily, which means only transacting players can see the generated Transaction Code and even 100 players using the script it wont give the same Transaction Code.

    prontera,155,155,3	script	TESTSTE	92,{
    
    	setarray .coupon_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";
    	
    	set .@new_transaction$, "";
    	set .@code_exists$, 0;
    
    	mes "test";
    	while (@code_exists == 0) {
    		for (set @i, 0; @i < 6; set @i, @i+1) {
    			set .@random_char$, rand(0, (getarraysize(.coupon_code$) - 1));
    			set .@new_transaction$, .@new_transaction$ + .coupon_code$[.@random_char$];
    		}
    
    		query_sql("SELECT COUNT(*) FROM transaction_tbl WHERE transaction_code='" + .@new_transaction$ + "'", .@code_count);
    		if (.@code_count == 0) {
    			set .@code_exists$, 1;
    			query_sql("INSERT INTO transaction_tbl (transaction_code) VALUES ('" + .@new_transaction$ + "')");
    			mes "Transaction Code: " + .@new_transaction$ + " inserted into the database.";
    		} else {
    			set .@new_transaction$, "";
    		}
    	}
    
    	set .@new_transaction$, "";
    
    close;
    
    }

     

    Thank you

  11. On 8/9/2021 at 6:21 PM, L1nkZ said:

    Hi,

    Yes, Windows 7 32-bit is supported.

    Hello L1nkz,

    Can someone provide the steps for using this Rpatchur?

    I am already able to build the Rpatchur. However, I don't know what folder and files to edit the data for the website. 

    is it on the Rpatchure folder? or the Example folder rpatchur.yml?

     

    Please help 

     

    Thank you

  12. 4 hours ago, LearningRO said:

     

    *mail <destination id>,"<sender name>","<title>","<body>"{,<zeny>{,<item id array>,<item amount array>{,refine{,bound{,<item card0 array>{,<item card1 array>{,<item card2 array>{,<item card3 array>
    		{,<random option id0 array>, <random option value0 array>, <random option paramter0 array>{,<random option id1 array>, <random option value1 array>, <random option paramter1 array>
    		{,<random option id2 array>, <random option value2 array>, <random option paramter2 array>{,<random option id3 array>, <random option value3 array>, <random option paramter3 array>
    		{,<random option id4 array>, <random option value4 array>, <random option paramter4 array>}}}}}}}}};

     

    wow thanks for this could you show some example how to define it in script? ? thanks

  13. On 11/30/2012 at 1:36 AM, clydelion said:

    Mail via Scriptcommand

    With this mod, you can do something like this..

    (The sample code in the background is outdated)

    douypu.jpg

    This is a scriptcommand I wanted when I still had a server. It can be used in Achievement Systems, WoE prizes, and other events. This is better than getitem because the recipient doesn't need to be online.

    Usage:

    * sendmail <Recipient's Char ID>,"<Sender's Name>","<Title>","<Body>",<zeny>,<item_id>,<amount>{,<refine>,<attribute>,<card1>,<card2>,<card3>,<card4>};

    Description:

    Uses the same functions as the default mail system, but this time, it is done via script. All item, recipent, message, and title assignment are done in the background. Enjoy this free release. :)

    PS: This have not been used on a live server, if you discover a bug (or if there's something wrong with my coding) let me know. :D

    My sample script:

    This code will give the player a +10 Knife and 10,000 zennies upon reaching job level 10.

     

    -<tab>script<tab>Mail Test<tab>-1,{
    OnPCJobLvUpEvent:
    if(JobLevel != 9) end;
    set .charid, getcharid(0);
    set .sender$, "Achievement System";
    set .title$, "Basic Skills";
    set .itemid, 1201;
    set .itemamount, 1;
    set .zeny, 10000;
    set .refine, 10;
    set .body$, "You have successfully unlocked the achievement '"+.title$+"'. You have received "+.itemamount+" "+getitemname(.itemid)+"s and "+.zeny+" zennies.";
    sendmail .charid,.sender$,.title$,.body$,.zeny,.itemid,.itemamount,.refine;
    end;
    }
     

     

    PS: This wasn't used on a live server, please report any bugs you encounter.

    DIFF LINK

    Are this added to latest rA svn?

  14. anyone? please

    On 6/16/2022 at 11:59 PM, Emistry said:

    if the db isn't stored in same instance, then you probably should setup a scheduled tasks to sync it or manually sync it instead.

    love it. Thanks Emistry your fan since 2012 

  15. On 8/9/2021 at 9:12 AM, Eross said:

    Hi ! Im using @whosell and @whobuy on my old server .. apparently something has change since we upgraded to latest rathena ... 

     

    errors are coming since then .. Please help heres my source codes 

     

    Index: atcommand.c
    ===================================================================
    --- atcommand.c	(revision 16082)
    +++ atcommand.c	(working copy)
    @@ -8473,6 +8473,69 @@
     	return 0;
     }
     
    +/*==========================================
    +* @whobuys - List who is buying the item (amount, price, and location).
    +* remake by VoidLess, original by zephyrus_cr
    +* re-edit by deathscythe to work in rAthena
    +*------------------------------------------*/
    +ACMD_FUNC(whobuys)
    +{
    +    char item_name[100];
    +    int item_id, j, count = 0, sat_num = 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);
    +    memset(item_name, '\0', sizeof(item_name));
    +
    +    if (!message || !*message || sscanf(message, "%99[^\n]", item_name) < 1) {
    +        clif_displaymessage(fd, "Input item name or ID (use: @whobuys <name or ID>).");
    +        return -1;
    +    }
    +    if ((item_data = itemdb_searchname(item_name)) == NULL &&
    +        (item_data = itemdb_exists(atoi(item_name))) == NULL)
    +    {
    +        clif_displaymessage(fd, msg_txt(sd, 19)); // Invalid item ID or name.
    +        return -1;
    +    }
    +
    +    item_id = item_data->nameid;
    +
    +    iter = mapit_getallusers();
    +    for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
    +    {
    +        if( pl_sd->buyer_id ) //check if player is autobuying
    +        {
    +			for (j = 0; j < pl_sd->buyingstore.slots; j++) {
    +				if(pl_sd->buyingstore.items[j].nameid == item_id) {
    +					snprintf(atcmd_output, CHAT_SIZE_MAX, "ID: %d | Price: %d z | Amount: %d | Buyer: %s | Location: %s (%d,%d)"
    +					,pl_sd->buyingstore.items[j].nameid
    +					,pl_sd->buyingstore.items[j].price
    +					,pl_sd->buyingstore.items[j].amount
    +					,pl_sd->status.name
    +					,mapindex_id2name(pl_sd->mapindex)
    +					,pl_sd->bl.x, pl_sd->bl.y);
    +					if(pl_sd->buyingstore.items[j].price < MinPrice) MinPrice = pl_sd->buyingstore.items[j].price;
    +					if(pl_sd->buyingstore.items[j].price > MaxPrice) MaxPrice = pl_sd->buyingstore.items[j].price;
    +                    clif_displaymessage(fd, atcmd_output);
    +                    count++;
    +                    flag = 1;
    +                }
    +            }
    +            if(flag && pl_sd->mapindex == sd->mapindex){
    +                clif_viewpoint(sd, 1, 1, pl_sd->bl.x, pl_sd->bl.y, ++sat_num, 0xFFFFFF);
    +                flag = 0;
    +            }
    +        }
    +    }
    +    mapit_free(iter);
    +
    +    if(count > 0) {
    +        snprintf(atcmd_output,CHAT_SIZE_MAX, "Found %d ea. Prices from %dz to %dz", count, MinPrice, MaxPrice);
    +        clif_displaymessage(fd, atcmd_output);
    +    } else
    +        clif_displaymessage(fd, "Nobody buying it now.");
    +
    +    return 0;
    +}
    +
     /**
      * Fills the reference of available commands in atcommand DBMap
      **/
    @@ -8717,6 +8780,7 @@
     		ACMD_DEF(charcommands),
     		ACMD_DEF(font),
     		ACMD_DEF(accinfo),
    +		ACMD_DEF(whobuys),
     		/**
     		 * For Testing Purposes, not going to be here after we're done.
     		 **/
    
    
    
    
    
    diff --git a/src/map/atcommand.cpp b/src/map/atcommand.cpp
    index cab676cce..b7456cda7 100644
    --- a/src/map/atcommand.cpp
    +++ b/src/map/atcommand.cpp
    @@ -8395,6 +8395,152 @@ ACMD_FUNC(mapflag) {
     	return 0;
     }
     
    +/*==========================================
    +* @whosells - List who is vending the item (amount, price, and location).
    +* ported to work in latest rA [Cookie]
    +*------------------------------------------*/
    +ACMD_FUNC(whosells)
    +{
    +   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: @whosells (<+refine> )(<item_id>)(<[card_id]>) or @whosells <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)){
    +    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: @whosells (<+refine> )(<item_id>)(<[card_id]>) or @whosells <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((item_data = itemdb_exists(pl_sd->cart.u.items_cart[pl_sd->vending[j].index].nameid)) == NULL)
    +			    continue;
    +		    if(s_type & 1 && pl_sd->cart.u.items_cart[pl_sd->vending[j].index].nameid != item_id)
    +			    continue;
    +    		if(s_type & 2 && ((item_data->type != IT_ARMOR && item_data->type != IT_WEAPON) ||
    +                    (pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[0] != card_id &&
    +                    pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[1] != card_id &&
    +                    pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[2] != card_id &&
    +                    pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[3] != card_id)))
    +                continue;
    +            if(s_type & 4 && ((item_data->type != IT_ARMOR && item_data->type != IT_WEAPON) || pl_sd->cart.u.items_cart[pl_sd->vending[j].index].refine != refine))
    +                continue;
    +            if(item_data->type == IT_ARMOR)
    +                snprintf(atcmd_output, CHAT_SIZE_MAX, "Refine: +%d | ID: %d | Card: [%d] | Price: %d z | Amount: %d  | Seller: %s | Location: %s (%d,%d)"
    +					 ,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].refine
    +                    ,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].nameid
    +                    ,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[0]
    +                    ,pl_sd->vending[j].value
    +                    ,pl_sd->vending[j].amount
    +                    ,pl_sd->status.name
    +                    ,mapindex_id2name(pl_sd->mapindex)
    +                    ,pl_sd->bl.x,pl_sd->bl.y);
    +            else if(item_data->type == IT_WEAPON)
    +                snprintf(atcmd_output, CHAT_SIZE_MAX, "Refine: +%d | ID: %d | Cards: [%d,%d,%d,%d] | Price: %d z | Amount: %d | Seller: %s | Location: %s (%d,%d)"
    +					 ,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].refine
    +                    ,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].nameid
    +                    ,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[0]
    +                    ,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[1]
    +                    ,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[2]
    +                    ,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[3]
    +                    ,pl_sd->vending[j].value
    +                    ,pl_sd->vending[j].amount
    +                    ,pl_sd->status.name
    +                    ,mapindex_id2name(pl_sd->mapindex)
    +                    ,pl_sd->bl.x,pl_sd->bl.y);
    +            else
    +                snprintf(atcmd_output, CHAT_SIZE_MAX, "ID: %d | Price: %d z | Amount: %d | Seller: %s | Location: %s (%d,%d)"
    +					 ,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].nameid
    +                    ,pl_sd->vending[j].value
    +                    ,pl_sd->vending[j].amount
    +					 ,pl_sd->status.name
    +                    ,mapindex_id2name(pl_sd->mapindex)
    +                    ,pl_sd->bl.x, pl_sd->bl.y);                
    +            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;
    +            clif_displaymessage(fd, atcmd_output);
    +            count++;
    +            flag = 1;
    +    		}
    +            if (flag && pl_sd->mapindex == sd->mapindex) {
    +			//if (flag && pl_sd->bl.m == sd->bl.m) {
    +                clif_viewpoint(sd, 1, 1, pl_sd->bl.x, pl_sd->bl.y, ++sat_num, 0xFFFFFF);
    +                flag = 0;
    +            }
    +        }
    +    }
    +    mapit_free(iter);
    +    if(count > 0) {
    +        snprintf(atcmd_output, CHAT_SIZE_MAX, "Found %d ea. Prices from %dz to %dz.", count, MinPrice, MaxPrice);
    +    clif_displaymessage(fd, atcmd_output);
    +   } else
    +    clif_displaymessage(fd, "Nobody is selling it now.");
    +   return 0;
    +}
    +
     /*===================================
      * Remove some messages
      *-----------------------------------*/
    @@ -10593,6 +10739,7 @@ void atcommand_basecommands(void) {
     		ACMD_DEFR(channel,ATCMD_NOSCRIPT),
     		ACMD_DEF(fontcolor),
     		ACMD_DEF(langtype),
    +		ACMD_DEF(whosells),
     #ifdef VIP_ENABLE
     		ACMD_DEF(vip),
     		ACMD_DEF(showrate),

    whobuy_whosell.patch 10.2 kB · 18 downloads

     

    Error occured on latest rAthena.  please see below. thanks for your help

    image.thumb.png.4325109ed688c9ecf1a236feb90037bd.png

×
×
  • Create New...