Jump to content

sader1992

Content Moderator
  • Posts

    1691
  • Joined

  • Last visited

  • Days Won

    77

Posts posted by sader1992

  1. 1 hour ago, Eross said:

    Thankyou for your response but its not working on my server ?

     image.png.e48cb9e6198c5b31c69a3ba7b4d61b86.png

     

    what about the other token ? does it work ? or everything doesn't work ?

     

    and try @resurrect command while the character is dead , this command is the same as pushing the revive button.

    I think this might be from the client diff.

  2. they should work by default , any item inside the group IG_TOKEN_OF_SIEGFRIED

    you can find this group in db folder in the item_misc.txt file depending on your server mode re or pre-re folder

     

    after the yml update it's in here

    pre-re

    https://github.com/rathena/rathena/blob/a251c3743c26f4042548e6cc3fb896503120b322/db/pre-re/item_group_db.yml#L5475

    or

    re

    https://github.com/rathena/rathena/blob/a251c3743c26f4042548e6cc3fb896503120b322/db/re/item_group_db.yml#L19553

  3. You are sure that the 

    .ladder_statues[.@i +1]

    is the npc id ?

    and 

    .@sex$[.@i]

    is M or F of the player ?

    the code above is correct however m = 1 not 0 and f = 0

    use this

    setunitdata(.ladder_statues[.@i+1],UNPC_SEX,((.@sex$[.@i] == "M")?1:0));

     

    if your rAthena is too old (years old), make sure long ago the F or M was on the account not character, in that case you can take the gender from the login table, however I think the line above will fix the issue you are having.

    you can use 

    debugmes(.@sex$[.@i]);

    to see if the variable is valid (make sure it's F or M)

  4. the only thing that I can suspect of

    is SC_ Something is a bad way to call a function or a label or a npc

    maybe try to rename the labels and functions ? specifically "SC_MOVEARM" "SC_ARMS" "SC_DISPARM"

    because I didn't check but maybe the server is translating it to a SC_ variables like SC_STUN and other variables

    to make it more readable I suggest to name the functions F_WhatEverYouWant , and labels as an event like OnWhatEverYouWant , NPCs rename them to WhatEverYouWant just don't use a prefix of a variables at the start

    not sure if this would fix the problem, but I don't see any problem in the script code from the error you are getting , this is my only conclusion.

  5. 7 hours ago, Rynbef said:

    @sader1992I know which variable type I'm using but u misslrading me much. 

    did I mislead you by giving you the link for the official documents?

    or telling you that you are using the incorrect variable types and it will lead to bugs in the script ? 

    or by the example that I included with the correct variable usage ?

    ????

     

    well , there still a problem in the script that I mentioned before , maybe it's your chance to reach version 99 in your script.

    • MVP 1
  6. 1 hour ago, Rynbef said:

    @wornTry this. The debug should now prompt on Ingame chat.

    getItemByMapFunction v10 - Experimentell - Extended Debugging.txt 5.43 kB · 1 download

     

    Rynbef~

    again you need to know why you are using a type of variable , you don't have to stick to one variable type , you should use what the script needs, check my old reply for more info

    looking at your script you should use .var + .@var + $@var 

    and there is no "debuglog" command

    and "serarray" is misspelled

    you should not use oninit or npc variables in a function

     

    here I just fixed all the above without editing the script

    getItemByMapFunction v10 - Experimentell - Extended Debugging.txt

  7. 1 hour ago, Rynbef said:

    @sader1992I think u means to change to scope variables. Next time I bet u to tell me what u mean.

      Reveal hidden contents
    /*
    rAthena Script
    Author: @Rynbef
    Create Date: 2021-19-12
    Last Updated: 2022-01-01
    
    Changelogs:
        2022-01-01:
            *changed OnNPCLoadEvent to OnNPCKillEvent
            *added check if killed enemie is player
            *removed space on callfunc after OnNPCKillEvent
            *fixed if statement syntax error
            *fixed if statement getarraysize of integer to getarraysize of specified getarg
            *removed callfunc OnInit
            *added console debugging can be disabled or enabled
            *changed variable types
            *fixed cant get item cause of wrong if statement
            *fixed for loop used array size instead random chance from argument getarg(3)
            *fixed player can't get item if random chance was equals to specified item chance
            *added argument amount to debug message
            *added map notification if player get lucky but not on a listed map. This can disabled or enabled seperat at OnInit below. Debugging needs to be enabled
            *added notification if everything works fine. Can be disabled or enabled on bottom of OnInit. Debugging needs to disabled
            #fixed wrong array output in for loop from getarg(0)[.i] to getelementofarray(getarg(0),.i)
            #changed .retval and .i vsriables to scope variables .@retval and .@i
    
    Feature planned:
        #Player get zeny if he get lucky
        #Player get zeny only if items disabled
        #Player get zeny or item if both enabled
    
    Description:
        Give a specified item getarg(1) of amount getarg(2) on specified map getarg(0) with a percentage of getarg(3) (0.1 to 100 percent) to a player
        
    IMPORTANT:
        All arrays needs to have the same sizes
        It's importent to set all 3 arguments to callfunc
    
    Terms:
        Dont name this as yours
        Dont sell this script
        Dont upload this script on download-/s section or share it otherwise for pay
        Modifications are included from this terms
        Otherwise feel free to edit
    
    Other:
        Don't hestiate to contact me at the forum as pm if u've any error,question,suggestion or want a modification
    
    Script:
    */
    
    -   script  GetItemByMap    -1,{
    
    OnNPCKillEvent:
        if(killedrid >= 150000)
            end;
        set .@retval,callfunc("F_GetItemByMap",$@maps$,$@items,$@item_amounts);
        if(!$@debug)
            end;
        if(.@retval == 1)
            debugmes "[F_GetItemByMap]: Works fine! Player get item.";
        else if(.@retval == 2)
            debugmes "[F_GetItemByMap]: Works fine! Player is unlucky and get no item.";
        else if(.@retval == 3 && $@debugmap)
            debugmes "[F_GetItemByMap]: Player isn't on a listed map. Current map: "+strcharinfo(3);
        else if(.@retval == 4 && $@debugworking)
            debugmes "[F_GetItemByMap]: Everything works fine!";
        else
            debugmes "[F_GetItemByMap]: Causes in errors. Debug logs on top!";
        end;
    
    OnInit:
        setarray $@maps$[0],"prontera","alberta","izlude";
        serarray $@items[0],501,4012,512;
        setarray $@item_amounts[0],100,1,5;
        setarray $@item_chance[0],1000,500,800;//Chance begins by 0.1 percentage. 1 = 0.1 and 1000 = 100 percent
        set $@debug,1;//0 = disable debugging,1 = enable
        set $@debugmap,1;//0 = disable map notification,1 = enable
        set $@debugworking,1;//0 = disable notification if everything works fine,1 = enable
        end;
    }
    
    function    script    F_GetItemByMap    {
    
    if(!getarg(0) || !getarg(1) || !getarg(2) || !getarg(3) || getarraysize(getarg(0)) != getarraysize(getarg(1)) || getarraysize(getarg(0)) != getarraysize(getarg(2)) || getarraysize(getarg(0)) != getarraysize(getarg(3))){
        if($@debug){
            debugmes "[F_GetItemByMap]: An error is occurupted";
            debugmes "[Function arguments]: Function arguments are empty or to short. Arguments: "+getargcount();
            debugmes "[Array sizes]: Maps:"+getarraysize(getarg(0))+" - Items:"+getarraysize(getarg(1))+" - Amounts:"+getarraysize(getarg(2))+" - Chances:"+getarraysize(getarg(3));
            debugmes "[Function arguments]: Maps:"+getarg(0)+" - Items:"+getarg(1)+" - Amounts:"+getarg(2)+" - Chances:"+getarg(3);
        }
        return 0;
    } else {
        for(.@i = 0; .@i<getarraysize(getarg(0)); .@i++){
            if(rand(1,1000) < getelementofarray(getarg(3),.@i))
                return 2;
            if(strcharinfo(3) == getelementofarray(getarg(0),.@i)){
                getitem getelementofarray(getarg(1),.@i),getelementofarray(getarg(2),.@i);
                return 1;
            } else if($@debugmap){
                return 3;
            }
        }
        }
        return 4;
    }

    Download is attached bellow

     

    getItemByMapFunction v4.txt 4.33 kB · 1 download

     

    Rynbef~

    what I meant is the other variables too, if the variable is only used inside the npc , you should use npc variable , also you might get problems when editing the npc and reload only that npc because $@ is global

    the function will return if any of the chances failed , (setarray $@item_chance[0],1,1,1000;) [try getting the 3rd item from the 3rd map with this chance]

    also there is no need for the function if it will only be called once.

    with other mistakes in the script ,you can check it if you test the script (I rarely test my scripts when replying to a post , so that's understandable xD)

     

    the debug messages are too much but that's my opinion

    with optimization this is the result

    -	script	GetItemByMap	-1,{
    OnNPCKillEvent:
    	if((.@n = inarray(.maps$,strcharinfo(3))) == -1) end;
    	if(rand(1000) <= .item_chance[.@n])
    		getitem(.items[.@n],.item_amounts[.@n]);
    end;
    
    OnInit:
    	setarray .maps$[0],"prontera","alberta","izlude";
    	setarray .items[0],501,4012,512;
    	setarray .item_amounts[0],100,1,5;
    	setarray .item_chance[0],1000,500,800;//Chance begins by 0.1 percentage. 1 = 0.1 and 1000 = 100 percent
    end;
    }

    this optimized script doesn't support inputting the same map twice , you can edit it to do so if you want that

     

  8. 27 minutes ago, Rynbef said:

    @wornThis should fix the error.

    /*
    rAthena Script
    Author: @Rynbef
    Create Date: 2021-19-12
    Last Updated: 2022-01-01
    
    Changelogs:
        2022-01-01:
            *changed OnNPCLoadEvent to OnNPCKillEvent
            *added check if killed enemie is player
            *removed space on callfunc after OnNPCKillEvent
            *fixed if statement syntax error
            *fixed if statement getarraysize of integer to getarraysize of specified getarg
            *removed callfunc OnInit
            *added console debugging can be disabled or enabled
            *changed variable types
            *fixed cant get item cause of wrong if statement
            *fixed for loop used array size instead random chance from argument getarg(3)
            *fixed player can't get item if random chance was equals to specified item chance
            *added argument amount to debug message
            *added map notification if player get lucky but not on a listed map. This can disabled or enabled seperat at OnInit below. Debugging needs to be enabled
            *added notification if everything works fine. Can be disabled or enabled on bottom of OnInit. Debugging needs to disabled
    
    Feature planned:
        #Player get zeny if he get lucky
        #Player get zeny only if items disabled
        #Player get zeny or item if both enabled
    
    Description:
        Give a specified item getarg(1) of amount getarg(2) on specified map getarg(0) with a percentage of getarg(3) (0.1 to 100 percent) to a player
        
    IMPORTANT:
        All arrays needs to have the same sizes
        It's importent to set all 3 arguments to callfunc
    
    Terms:
        Dont name this as yours
        Dont sell this script
        Dont upload this script on download-/s section or share it otherwise for pay
        Modifications are included from this terms
        Otherwise feel free to edit
    
    Other:
        Don't hestiate to contact me at the forum as pm if u've any error,question,suggestion or want a modification
    
    Script:
    */
    
    -   script  GetItemByMap    -1,{
    
    OnNPCKillEvent:
        if(killedrid >= 150000)
            end;
        set .retval,callfunc("F_GetItemByMap",$@maps$,$@items,$@item_amounts);
        if(!$@debug)
            end;
        if(.retval == 1)
            debugmes "[F_GetItemByMap]: Works fine! Player get item.";
        else if(.retval == 2)
            debugmes "[F_GetItemByMap]: Works fine! Player is unlucky and get no item.";
        else if(.retval == 3 && $@debugmap)
            debugmes "[F_GetItemByMap]: Player isn't on a listed map. Current map: "+strcharinfo(3);
        else if(.retval == 4 && $@debugworking)
            debugmes "[F_GetItemByMap]: Everything works fine!";
        else
            debugmes "[F_GetItemByMap]: Causes in errors. Debug logs on top!";
        end;
    
    OnInit:
        setarray $@maps$[0],"prontera","alberta","izlude";
        serarray $@items[0],501,4012,512;
        setarray $@item_amounts[0],100,1,5;
        setarray $@item_chance[0],1000,500,800;//Chance begins by 0.1 percentage. 1 = 0.1 and 1000 = 100 percent
        set $@debug,1;//0 = disable debugging,1 = enable
        set $@debugmap,1;//0 = disable map notification,1 = enable
        set $@debugworking,1;//0 = disable notification if everything works fine,1 = enable
        end;
    }
    
    function    script    F_GetItemByMap    {
    
    if(!getarg(0) || !getarg(1) || !getarg(2) || !getarg(3) || getarraysize(getarg(0)) != getarraysize(getarg(1)) || getarraysize(getarg(0)) != getarraysize(getarg(2)) || getarraysize(getarg(0)) != getarraysize(getarg(3))){
        if($@debug){
            debugmes "[F_GetItemByMap]: An error is occurupted";
            debugmes "[Function arguments]: Function arguments are empty or to short. Arguments: "+getargcount();
            debugmes "[Array sizes]: Maps:"+getarraysize(getarg(0))+" - Items:"+getarraysize(getarg(1))+" - Amounts:"+getarraysize(getarg(2))+" - Chances:"+getarraysize(getarg(3));
            debugmes "[Function arguments]: Maps:"+getarg(0)+" - Items:"+getarg(1)+" - Amounts:"+getarg(2)+" - Chances:"+getarg(3);
        }
        return 0;
    } else {
        for(.i = 0; .i<getarraysize(getarg(0)); .i++){
            if(rand(1,1000) < getelementofarray(getarg(3),.i))
                return 2;
            if(strcharinfo(3) == getelementofarray(getarg(0),.i)){
                getitem getelementofarray(getarg(1),.i),getelementofarray(getarg(2),.i);
                return 1;
            } else if($@debugmap){
                return 3;
            }
        }
        }
        return 4;
    }

     

    getItemByMapFunction v3.txt 4.14 kB · 1 download

     

    Rynbef~

    https://github.com/rathena/rathena/blob/bdf568979dd53702494d3a6b3b9d35054c44594a/doc/script_commands.txt#L432

  9. 11 hours ago, kalabasa said:

    is there a way to display properly on 2015 clients?

    function Slot {
    	set .@s$,getitemname(getarg(0));
    	switch(.ShowSlot) {
    		case 1: if (!getitemslots(getarg(0))) break;
    		case 2: if (getiteminfo(getarg(0), ITEMINFO_TYPE) == 4 || getiteminfo(getarg(0), ITEMINFO_TYPE) == 5) .@s$+=" ["+getitemslots(getarg(0))+"]";
    	}
    	return "<ITEMLINK>" + .@s$ + "<INFO>" + getarg(0) + "</INFO></ITEMLINK>";
    }

    This for 2014 and under , in 2015 the disply changed , however not sure which month

  10. function Slot {
    	set .@s$,getitemname(getarg(0));
    	switch(.ShowSlot) {
    		case 1: if (!getitemslots(getarg(0))) return .@s$;
    		case 2: if (getiteminfo(getarg(0), ITEMINFO_TYPE) == 4 || getiteminfo(getarg(0), ITEMINFO_TYPE) == 5) return .@s$+" ["+getitemslots(getarg(0))+"]";
    		default: return .@s$;
    	}
    }

    To

    function Slot {
    	set .@s$,getitemname(getarg(0));
    	switch(.ShowSlot) {
    		case 1: if (!getitemslots(getarg(0))) break;
    		case 2: if (getiteminfo(getarg(0), ITEMINFO_TYPE) == 4 || getiteminfo(getarg(0), ITEMINFO_TYPE) == 5) .@s$+=" ["+getitemslots(getarg(0))+"]";
    	}
    	return "<ITEM>" + .@s$ + "<INFO>" + getarg(0) + "</INFO></ITEM>";
    }

     

    • Upvote 1
    • Love 1
  11. 8 hours ago, worn said:

    @sader1992

     

    can i use this in several maps the second example? or is there any problem? example I'll create one just for lhz, another just for pay_dun another just for x map

    -	script	monsterdrop	-1,{
    OnNPCKillEvent:
    	if(inarray(.maps$,strcharinfo(3)) != -1){
    		if(rand(100) <= 9){//9%
    			getitem(502,1);//item id is the 502
    		}
    	}
    end;
    
    OnInit:
    	setarray .maps$,"lhz_dun03","prontera";
    end;
    }

     

  12. 5 hours ago, DevilSupremeRO said:

    Reward Giver for Group ID 1 Thanks in advance

    not much information given

    something like this ?

    if(getgroupid() == 1){
    	if(!GotTheReward){
    		getitem(501,1);
    		GotTheReward = true;
    		mes "you got the reward";
    		end;
    	}else{
    		mes "you already got the reward";
    		end;
    	}
    }else{
    	mes"this reward only for group id 1";
    	end;
    }

     

  13. all monsters

    -	script	monsterdrop	-1,{
    OnNPCKillEvent:
    	if(rand(100) <= 9){//9%
    		getitem(502,1);//item id is the 502
    	}
    end;
    }

     

    only in lhz_dun03

    -	script	monsterdrop	-1,{
    OnNPCKillEvent:
    	if(strcharinfo(3) == "lhz_dun03"){//map name lhz_dun03
    		if(rand(100) <= 9){//9%
    			getitem(502,1);//item id is the 502
    		}
    	}
    end;
    }

     

    • Upvote 1
    • Like 1
  14. 8 hours ago, kalabasa said:
    //===== rAthena Script =======================================
    //= Disguise Event
    //===== By: ==================================================
    //= GmOcean
    //===== Current Version: =====================================
    //= 5.1
    //===== Compatible With: =====================================
    //= rAthena Project
    //===== Description: =========================================
    //= Guess a monster name correctly for prizes.
    //= 
    //= NOTE: Requires PCRE library installed.
    //===== Additional Comments: =================================
    //= 5.0 Last update by GmOcean.
    //= 5.1 Cleaned and standardized, mostly. [Euphy]
    //============================================================
    
    prontera,160,155,4	script	Disguise Event	795,{
    
    	// Currently set to run every two hours.
    	// To change times, edit the OnClock labels below.
    
    	set .@GMLevel,60;	// GM level required to access NPC.
    	set .@n$,"[^0000FFDisguise NPC^000000]";
    
    	if (getgmlevel()>=.@GMLevel) {
    		mes .@n$;
    		mes "Select an option.";
    		next;
    		switch(select("Turn ON/OFF Event:Event Settings")) {
    		case 1:
    			mes .@n$;
    			if (.EventON) {
    				mes "The Event is currently: [^0000FFON^000000]";
    				mes "Would you like to turn it OFF?";
    			} else {
    				mes "The Event is currently: [^FF0000OFF^000000]";
    				mes "Would you like to turn it ON?";
    			}
    			if(select("Yes:No")==2) close;
    			if (.EventON) {
    				set .EventON,0; set .Timer,0;
    				setnpctimer 0; stopnpctimer;
    				announce "A GM has decided to turn the Disguise Event off. As a result no further prizes will be given.",bc_map | bc_blue;
    				deletepset 1;
    				setnpcdisplay "Disguise Event",795;
    				close;
    			}
    			set .EventON,1; set .Timer,1; setnpctimer 0; initnpctimer;
    			set .ResetCounter,.ResetCounter+1;
    			announce "The Disguise Event will begin in 3 minutes.",bc_all | bc_blue;
    			announce "The Event is being held in Prontera.",bc_all | bc_blue;
    			close;
    		case 2:
    			mes .@n$;
    			mes "Pick a setting to modify.";
    			next;
    			switch(select("Monster Display:Number of Rounds:Prize Settings")) {
    			case 1:
    				setarray .@r$[0],"Disguise as all monsters.","Disguise as MVPs only.";
    				mes .@n$;
    				mes "Choose a disguise rule.";
    				next;
    				set .Rule, select(implode(.@r$,":"));
    				mes .@n$;
    				mes "The Disguise Rule has been set:";
    				mes "  > ^0055FF"+.@r$[.Rule-1]+"^000000";
    				close;
    			case 2:
    				mes .@n$;
    				mes "Input the number of rounds you want the event to last.";
    				mes "Current number: [^0000FF"+.Rounds+"^000000]";
    				next;
    				input .@Rounds;
    				set .Rounds,.@Rounds;
    				mes .@n$;
    				mes "The number of rounds has been changed to "+.Rounds+".";
    				close;
    			case 3:
    				mes .@n$;
    				mes "Input the Item ID of the prize given each round.";
    				mes "Current item: [^0000FF"+getitemname(.Prize)+"^000000] (ID #"+.Prize+")";
    				next;
    				input .@Prize;
    				mes .@n$;
    				if (getitemname(.@Prize)=="" || getitemname(.@Prize)=="null") {
    					mes "That item does not exist. Please try again.";
    					close;
    				}
    				set .Prize,.@Prize;
    				mes "Input the amount to be given.";
    				next;
    				input .@amount;
    				mes .@n$;
    				if (.@amount<=0 || .@amount>=10000) {
    					mes "That amount is invalid. Using default amount of 1.";
    					set .@amount,1;
    					next;
    					mes .@n$;
    				}
    				set .PrizeAmt,.@amount;
    				mes "The Prize has been changed successfully.";
    				mes "Prize: "+.PrizeAmt+"x [^0000FF"+getitemname(.Prize)+"^000000]";
    				close;
    			}
    		}
    	}
    	if (.EventON) end;
    	mes .@n$;
    	mes "Welcome.";
    	mes "How may I be of assistance?";
    	if(select("Information:Nothing, just passing through.")==2) close;
    	next;
    	mes .@n$;
    	mes "This event is quite simple.";
    	mes "At the start of the event, I will";
    	mes "disguise myself as a random";
    	mes "monster. You have to shout";
    	mes "that monster's name out loud.";
    	next;
    	mes "If you are correct, you will receive";
    	mes "a prize. If not, keep trying!";
    	mes "That's all that there is to this event.";
    	close;
    
    OnInit:
    	set .EventON,0;
    	set .Wait,0;
    	set .Winner,0;
    	set .ResetCounter,0;
    	set .Rounds,10;
    	set .Prize,512;
    	set .PrizeAmt,1;
    	set .Rule,1;
    	setarray .MVP[0],1038,1039,1046,1059,1086,1087,1112,1115,1147,1150,1157,1159,1190,1251,1252,1272,1312,1373,
    	                  1389,1399,1418,1492,1502,1511,1583,1623,1630,1646,1647,1648,1649,1650,1651,1658,1685,1688,
    				   1708,1719,1734,1751,1768,1779,1785,1802,1832,1871,1874,1885,1917,1980,2022,2068,2087,2131,
    				   2156,2165;
    	set .BlackList$, "1003,1006,1017,1021,1022,1027,1043,1075,1136,1137,1168," + 
    	    "1171,1172,1173,1181,1187,1210,1217,1218,1222,1223,1224,1225,1226,1227,1228," + 
    	    "1233,1284,1407,1411,1414,1495,1501,1900,1996,2000,2001,2002,2003,2004," + 
    	    "2005,2006,2007,2011,2012,2025,2028,2029,2030,2031,2032,2033,2034,2035," + 
    	    "2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049," + 
    	    "2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063," + 
    	    "2064,2065,2066,2067,2075,2076,2077,2078,2079,2080,2081,2083,2084,2085," + 
    	    "2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099," + 
    	    "2100,2101,2012,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113," + 
    	    "2114,2115,2116,2117,2118,2119,2120,2121,2123,2124,2125,1496,";
    	end;
    OnClock0000:
    OnClock0200:
    OnClock0400:
    OnClock0600:
    OnClock0800:
    OnClock1000:
    OnClock1200:
    OnClock1400:
    OnClock1600:
    OnClock1800:
    OnClock2000:
    OnClock2200:
    	set .ResetCounter,.ResetCounter+1;
    	set .EventON,1;
    	set .Timer,1;
    	set .Wait,1;
    	announce "The Disguise Event will begin in 3 minutes.",bc_all | bc_blue;
    	announce "The Event is being held in Prontera.",bc_all | bc_blue;
    	setnpctimer 0;
    	initnpctimer;
    	end;
    OnTimer10000:
    	if (.Timer || .Change) end;
    	set .Wait,0;
    	goto iDisguise;
    	end;
    OnTimer30000:
    	if (.Timer) end;
    	set .Change,0;
    	setnpcdisplay "Disguise Event",795;
    	npctalk "Disguise Event : You took too long to guess what I was. Please wait 10 seconds while I disguise again.";
    	specialeffect EF_DETECT2;
    	set $MonsterName$,"";
    	deletepset 1;
    	stopnpctimer;
    	setnpctimer 0;
    	initnpctimer;
    	end;
    OnTimer60000:
    	if (.Timer!=1) end;
    	announce "The Disguise Event will begin in 2 minutes.",bc_all | bc_blue;
    	announce "The Event is being held in Prontera.",bc_all | bc_blue;
    	end;
    OnTimer120000:
    	if (.Timer!=1) end;
    	announce "The Disguise Event will begin 1 minute.",bc_all | bc_blue;
    	announce "The Event is being held in Prontera.",bc_all | bc_blue;
    	end;
    OnTimer180000:
    	if (.Timer!=1) end;
    	announce "The Disguise Event has begun!",bc_all | bc_blue;
    	announce "The Event is being held in Prontera.",bc_all | bc_blue;
    	set .Timer,0; stopnpctimer;
    	setnpctimer 0; initnpctimer;
    iDisguise:
    	if (.Rule==1) {
    		set .Winner,0;
    		set .Monster,1000+rand(1,995);
    		if (compare(","+.BlackList$+"," , ","+.Monster+",")) goto iDisguise;
    		if (.Monster==.LastMonster) goto iDisguise;
    		set .LastMonster,.Monster;
    		set $MonsterName$,getmonsterinfo(.Monster,0);
    	}
    	if (.Rule==2) {
    		set .Winner,0;
    		set .Monster,rand(49);
    		set $MonsterName$,getmonsterinfo(.MVP[.Monster],0);
    	}
    	deletepset 1;
    	defpattern 1,"([^:]+):.\\s*"+$MonsterName$+".*", "iCorrect";
    	activatepset 1;
    	if (.Rule==1) setnpcdisplay "Disguise Event",.Monster;
    	if (.Rule==2) setnpcdisplay "Disguise Event",.MVP[.Monster];
    	set .Change,1;
    	setnpctimer 0;
    	end;
    iCorrect:
    	if (.Winner) {
    		dispbottom "Someone has already won this round.";
    		end;
    	}
    	set .Winner,1;
    	set .RoundCount,.RoundCount+1;
    	deletepset 1;
    	activatepset 1;
    	getitem .Prize,.PrizeAmt;
    	announce strcharinfo(0)+" is correct! I was disguised as: "+$MonsterName$+"",bc_map | bc_blue;
    	if (.RoundCount>=.Rounds) {
    		setnpcdisplay "Disguise Event",795;
    		set .RoundCount,0; set .Change,0; set .EventON,0;
    		setnpctimer 0; stopnpctimer;
    		npctalk "Disguise Event : Thank you all for playing. That was the last round of the Disguise Event. Come play again later.";
    		end;
    	}
    	setnpcdisplay "Disguise Event",795;
    	set .Change,0;
    	setnpctimer 0;
    	end;
    }

    this is the code i want to insert

     

    // setarray .@reward1, "chance", item id, item amount...
    		setarray .@reward1, 5, 7539, 10; // Item ID 7539 x 10with chance of 5% in getting, You can add more..
    		setarray .@reward2, 15, 7420, 5; // Item ID 7420 x 5 with chance of 15% in getting, You can add more..
    		setarray .@reward3, 20, 671, 1; // etc...
    		setarray .@reward4, 25, 672, 1;
    		setarray .@reward5, 30, 673, 1;
    		setarray .@reward7, 100, 673, 1;
    		
    		sleep2 300;
    		set .@r, rand(100);
    		while( .@r >= getd( ".@reward"+ .@i ) ) .@i++;
    		.@rand_index = rand( 1,( getarraysize( getd( ".@reward"+ .@i ) ) -1 )/2 ) *2 -1;
    		getitem getd( ".@reward"+ .@i +"["+ .@rand_index +"]" ), getd( ".@reward"+ .@i +"["+ (.@rand_index +1) +"]" );

     

    did you really just edited your old reply to give me what i asked for next? and by doing that you made it so i don't get a notification and you were waiting for my reply ?

    //===== rAthena Script =======================================
    //= Disguise Event
    //===== By: ==================================================
    //= GmOcean
    //===== Current Version: =====================================
    //= 5.1
    //===== Compatible With: =====================================
    //= rAthena Project
    //===== Description: =========================================
    //= Guess a monster name correctly for prizes.
    //= 
    //= NOTE: Requires PCRE library installed.
    //===== Additional Comments: =================================
    //= 5.0 Last update by GmOcean.
    //= 5.1 Cleaned and standardized, mostly. [Euphy]
    //============================================================
    
    prontera,160,155,4	script	Disguise Event	795,{
    
    	// Currently set to run every two hours.
    	// To change times, edit the OnClock labels below.
    
    	set .@GMLevel,60;	// GM level required to access NPC.
    	set .@n$,"[^0000FFDisguise NPC^000000]";
    
    	if (getgmlevel()>=.@GMLevel) {
    		mes .@n$;
    		mes "Select an option.";
    		next;
    		switch(select("Turn ON/OFF Event:Event Settings")) {
    		case 1:
    			mes .@n$;
    			if (.EventON) {
    				mes "The Event is currently: [^0000FFON^000000]";
    				mes "Would you like to turn it OFF?";
    			} else {
    				mes "The Event is currently: [^FF0000OFF^000000]";
    				mes "Would you like to turn it ON?";
    			}
    			if(select("Yes:No")==2) close;
    			if (.EventON) {
    				set .EventON,0; set .Timer,0;
    				setnpctimer 0; stopnpctimer;
    				announce "A GM has decided to turn the Disguise Event off. As a result no further prizes will be given.",bc_map | bc_blue;
    				deletepset 1;
    				setnpcdisplay "Disguise Event",795;
    				close;
    			}
    			set .EventON,1; set .Timer,1; setnpctimer 0; initnpctimer;
    			set .ResetCounter,.ResetCounter+1;
    			announce "The Disguise Event will begin in 3 minutes.",bc_all | bc_blue;
    			announce "The Event is being held in Prontera.",bc_all | bc_blue;
    			close;
    		case 2:
    			mes .@n$;
    			mes "Pick a setting to modify.";
    			next;
    			switch(select("Monster Display:Number of Rounds:Prize Settings")) {
    			case 1:
    				setarray .@r$[0],"Disguise as all monsters.","Disguise as MVPs only.";
    				mes .@n$;
    				mes "Choose a disguise rule.";
    				next;
    				set .Rule, select(implode(.@r$,":"));
    				mes .@n$;
    				mes "The Disguise Rule has been set:";
    				mes "  > ^0055FF"+.@r$[.Rule-1]+"^000000";
    				close;
    			case 2:
    				mes .@n$;
    				mes "Input the number of rounds you want the event to last.";
    				mes "Current number: [^0000FF"+.Rounds+"^000000]";
    				next;
    				input .@Rounds;
    				set .Rounds,.@Rounds;
    				mes .@n$;
    				mes "The number of rounds has been changed to "+.Rounds+".";
    				close;
    			case 3:
    				mes .@n$;
    				mes "Input the Item ID of the prize given each round.";
    				mes "Current item: [^0000FF"+getitemname(.Prize)+"^000000] (ID #"+.Prize+")";
    				next;
    				input .@Prize;
    				mes .@n$;
    				if (getitemname(.@Prize)=="" || getitemname(.@Prize)=="null") {
    					mes "That item does not exist. Please try again.";
    					close;
    				}
    				set .Prize,.@Prize;
    				mes "Input the amount to be given.";
    				next;
    				input .@amount;
    				mes .@n$;
    				if (.@amount<=0 || .@amount>=10000) {
    					mes "That amount is invalid. Using default amount of 1.";
    					set .@amount,1;
    					next;
    					mes .@n$;
    				}
    				set .PrizeAmt,.@amount;
    				mes "The Prize has been changed successfully.";
    				mes "Prize: "+.PrizeAmt+"x [^0000FF"+getitemname(.Prize)+"^000000]";
    				close;
    			}
    		}
    	}
    	if (.EventON) end;
    	mes .@n$;
    	mes "Welcome.";
    	mes "How may I be of assistance?";
    	if(select("Information:Nothing, just passing through.")==2) close;
    	next;
    	mes .@n$;
    	mes "This event is quite simple.";
    	mes "At the start of the event, I will";
    	mes "disguise myself as a random";
    	mes "monster. You have to shout";
    	mes "that monster's name out loud.";
    	next;
    	mes "If you are correct, you will receive";
    	mes "a prize. If not, keep trying!";
    	mes "That's all that there is to this event.";
    	close;
    
    OnInit:
    	// setarray .@reward1, "chance", item id, item amount...
    		setarray .reward1, 5, 7539, 10; // Item ID 7539 x 10with chance of 5% in getting, You can add more..
    		setarray .reward2, 15, 7420, 5; // Item ID 7420 x 5 with chance of 15% in getting, You can add more..
    		setarray .reward3, 20, 671, 1; // etc...
    		setarray .reward4, 25, 672, 1;
    		setarray .reward5, 30, 673, 1;
    		setarray .reward7, 100, 673, 1;
    
    	set .EventON,0;
    	set .Wait,0;
    	set .Winner,0;
    	set .ResetCounter,0;
    	set .Rounds,10;
    	set .Prize,512;
    	set .PrizeAmt,1;
    	set .Rule,1;
    	setarray .MVP[0],1038,1039,1046,1059,1086,1087,1112,1115,1147,1150,1157,1159,1190,1251,1252,1272,1312,1373,
    	                  1389,1399,1418,1492,1502,1511,1583,1623,1630,1646,1647,1648,1649,1650,1651,1658,1685,1688,
    				   1708,1719,1734,1751,1768,1779,1785,1802,1832,1871,1874,1885,1917,1980,2022,2068,2087,2131,
    				   2156,2165;
    	set .BlackList$, "1003,1006,1017,1021,1022,1027,1043,1075,1136,1137,1168," + 
    	    "1171,1172,1173,1181,1187,1210,1217,1218,1222,1223,1224,1225,1226,1227,1228," + 
    	    "1233,1284,1407,1411,1414,1495,1501,1900,1996,2000,2001,2002,2003,2004," + 
    	    "2005,2006,2007,2011,2012,2025,2028,2029,2030,2031,2032,2033,2034,2035," + 
    	    "2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049," + 
    	    "2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063," + 
    	    "2064,2065,2066,2067,2075,2076,2077,2078,2079,2080,2081,2083,2084,2085," + 
    	    "2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099," + 
    	    "2100,2101,2012,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113," + 
    	    "2114,2115,2116,2117,2118,2119,2120,2121,2123,2124,2125,1496,";
    	end;
    OnClock0000:
    OnClock0200:
    OnClock0400:
    OnClock0600:
    OnClock0800:
    OnClock1000:
    OnClock1200:
    OnClock1400:
    OnClock1600:
    OnClock1800:
    OnClock2000:
    OnClock2200:
    	set .ResetCounter,.ResetCounter+1;
    	set .EventON,1;
    	set .Timer,1;
    	set .Wait,1;
    	announce "The Disguise Event will begin in 3 minutes.",bc_all | bc_blue;
    	announce "The Event is being held in Prontera.",bc_all | bc_blue;
    	setnpctimer 0;
    	initnpctimer;
    	end;
    OnTimer10000:
    	if (.Timer || .Change) end;
    	set .Wait,0;
    	goto iDisguise;
    	end;
    OnTimer30000:
    	if (.Timer) end;
    	set .Change,0;
    	setnpcdisplay "Disguise Event",795;
    	npctalk "Disguise Event : You took too long to guess what I was. Please wait 10 seconds while I disguise again.";
    	specialeffect EF_DETECT2;
    	set $MonsterName$,"";
    	deletepset 1;
    	stopnpctimer;
    	setnpctimer 0;
    	initnpctimer;
    	end;
    OnTimer60000:
    	if (.Timer!=1) end;
    	announce "The Disguise Event will begin in 2 minutes.",bc_all | bc_blue;
    	announce "The Event is being held in Prontera.",bc_all | bc_blue;
    	end;
    OnTimer120000:
    	if (.Timer!=1) end;
    	announce "The Disguise Event will begin 1 minute.",bc_all | bc_blue;
    	announce "The Event is being held in Prontera.",bc_all | bc_blue;
    	end;
    OnTimer180000:
    	if (.Timer!=1) end;
    	announce "The Disguise Event has begun!",bc_all | bc_blue;
    	announce "The Event is being held in Prontera.",bc_all | bc_blue;
    	set .Timer,0; stopnpctimer;
    	setnpctimer 0; initnpctimer;
    iDisguise:
    	if (.Rule==1) {
    		set .Winner,0;
    		set .Monster,1000+rand(1,995);
    		if (compare(","+.BlackList$+"," , ","+.Monster+",")) goto iDisguise;
    		if (.Monster==.LastMonster) goto iDisguise;
    		set .LastMonster,.Monster;
    		set $MonsterName$,getmonsterinfo(.Monster,0);
    	}
    	if (.Rule==2) {
    		set .Winner,0;
    		set .Monster,rand(49);
    		set $MonsterName$,getmonsterinfo(.MVP[.Monster],0);
    	}
    	deletepset 1;
    	defpattern 1,"([^:]+):.\\s*"+$MonsterName$+".*", "iCorrect";
    	activatepset 1;
    	if (.Rule==1) setnpcdisplay "Disguise Event",.Monster;
    	if (.Rule==2) setnpcdisplay "Disguise Event",.MVP[.Monster];
    	set .Change,1;
    	setnpctimer 0;
    	end;
    iCorrect:
    	if (.Winner) {
    		dispbottom "Someone has already won this round.";
    		end;
    	}
    	set .Winner,1;
    	set .RoundCount,.RoundCount+1;
    	deletepset 1;
    	activatepset 1;
    	set .@r, rand(100);
    	while( .@r >= getd( ".reward"+ .@i ) ) .@i++;
    	.@rand_index = rand( 1,( getarraysize( getd( ".reward"+ .@i ) ) -1 )/2 ) *2 -1;
    	getitem getd( ".reward"+ .@i +"["+ .@rand_index +"]" ), getd( ".reward"+ .@i +"["+ (.@rand_index +1) +"]" );
    	getitem .Prize,.PrizeAmt;
    	announce strcharinfo(0)+" is correct! I was disguised as: "+$MonsterName$+"",bc_map | bc_blue;
    	if (.RoundCount>=.Rounds) {
    		setnpcdisplay "Disguise Event",795;
    		set .RoundCount,0; set .Change,0; set .EventON,0;
    		setnpctimer 0; stopnpctimer;
    		npctalk "Disguise Event : Thank you all for playing. That was the last round of the Disguise Event. Come play again later.";
    		end;
    	}
    	setnpcdisplay "Disguise Event",795;
    	set .Change,0;
    	setnpctimer 0;
    	end;
    }

     

    • Upvote 2
  15. I see now the script is edited more , and the error should now change like you wont get the "getitem" error

    putting the code like that it wont work , put it all of it in the same place where the player will get the reward.

     

    provide the unedited script and the code you want to import separately and where the reward line would be and i will put it for you

  16. "make_listen_bind: bind failed" means that the port is already in-use , maybe you have another copy of the program already running , or you use the port for something else already

    if you don't use the port for something else , i think the most non-technical way for you to fix is to reboot your system , the first time you run the program again after the reboot should work , if it didn't work the 2nd time and after that then you are not closing the program , you are just hiding it

    for Windows check the task manager , for Linux search for a task manager in the internet , I recommend "htop", search for the program and end it task

    you should also learn how to open/close programs properly.

    ofc that doesn't mean you wont get other errors , this only for how to fix the "make_listen_bind: bind failed" error

  17. 17 hours ago, qtdan said:

    yeah it stops when i already exchange more than 50, the problem is if i change 1st time of the day by 49 i records 49 and again if i change again 50 total of 99 it still accepts it.

    I didn't understand but I guess you are talking about the .@left

    look how I used it in the example above, you assigned it in your script but you never used it

  18. this is a reference for you

    	if(getd("#wqeqwe_" + gettime(DT_YYYYMMDD)) < .day_limit){
    		.@left = .day_limit - getd("#wqeqwe_" + gettime(DT_YYYYMMDD));
    		mes "Input how many";
    		input .@count,0,.@left;
    		delitem .@coin,.@count;
    		getitem .@new_coin,.@count;
    		setd("#wqeqwe_" + gettime(DT_YYYYMMDD),getd("#wqeqwe_" + gettime(DT_YYYYMMDD)) + .@count);
    		end;
    	}
    	mes "You cannot exchange anymore today!";
    	end;

     

×
×
  • Create New...