-
Posts
55 -
Joined
-
Last visited
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Crowdfunding
Everything posted by Cyborg
-
Maybe you have a map like this, I just need it, thanks for sharing.
-
who knows how to change number on Max Party?
Cyborg replied to Cyborg's question in Client-side Support
thank you -
who knows how to change number on Max Party?
Cyborg replied to Cyborg's question in Client-side Support
im done but i want to change a 12/12 on client to 15/15 you can help for this? -
who knows how to change number on Max Party?
Cyborg replied to Cyborg's question in Client-side Support
I can't see it in my diff exe -
who knows how to change number on Max Party?
Cyborg replied to Cyborg's question in Client-side Support
how to edit? -
How to change 15 > 12 to 15 > 15 Thank you for your help.
-
okay i will try thanks for your advice i will feedback later if work
-
hi here because in this part he won't finish and hide the npc is not what I need in this part after the round and hide the npc
-
if I erase him, he won't hide because I have to hide, but his round will end in 10 rounds
-
I'm going to sleep here, I don't want to hide after 10 rounds, I hope you can help me here, how can he stop after 10 rounds and hide again //===== 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: hideonnpc strnpcinfo(3); 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; hideoffnpc strnpcinfo(3); 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; hideonnpc strnpcinfo(3); 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; }
-
solve this thank you
-
where find this script npc Chief Officer on prontera thank you for advice
-
paano po siya bagohin na single npc lang sa isang coordinate po salamat po sa tutulong. //===== rAthena Script ===================================== //= Vendor Control //===== By: ================================================ //= Original by Emistry //= Rewrite by AnnieRuru //===== Current Version: =================================== //= 2.1r //===== Compatible With: =================================== //= rAthena 2019-2-10 //===== Description: ======================================= //= Vendors only vend on certain coordinate, looks tidy :P //===== Topic ============================================== //= https://rathena.org/board/topic/117737-error-vendinghelp/ //===== Additional Comments: =============================== //= Revert back to use warp //========================================================== prontera,156,178,4 script Vending Helper 4_F_JPN2,{ mes "["+ strnpcinfo(NPC_NAME_VISIBLE) +"]"; if ( !getskilllv( "MC_VENDING" ) ) { mes "You dont have ^0055FFVending Skill^000000."; close; } mes "Select a slot and start vending."; while ( true ) { .@menu$ = .@currentpage ? "Previous Page:" : ":"; .@pageindex = .@currentpage * .slotperpage; for ( .@i = 0; .@i < .slotperpage && .@pageindex + .@i < .count; ++.@i ) { if ( !getmapxy( .@map$, .@x, .@y, BL_NPC, "#vend_slot"+( .@pageindex + .@i ) ) && getareausers( .map$, .@x, .@y, .@x, .@y ) ) .@menu$ += "Slot No."+( .@pageindex + .@i +1 )+" - ^FF0000[Unavailable]^000000:"; else .@menu$ += "Slot No."+( .@pageindex + .@i +1 )+" - ^00CC00[Available]^000000:"; } if ( .@currentpage != .maxpage ) .@menu$ = .@menu$ + "Next Page"; .@pick = select( .@menu$ ) -1; if ( !.@pick ) { --.@currentpage; } else if ( .@pick == .slotperpage +1 ) { ++.@currentpage; } else break; } .@s = .@currentpage * .slotperpage + .@pick -1 ; if ( !getmapxy( .@map$, .@x, .@y, BL_NPC, "#vend_slot"+ .@s ) && getareausers( .map$, .@x, .@y, .@x, .@y ) ) { mes " "; mes "This slot is ^FF0000[UnAvailable]^000000."; close; } warp .@map$, .@x, .@y; hideonnpc "#vend_slot"+ .@s; donpcevent "#vend_slot"+ .@s +"::OnCheckAvailable"; end; OnInit: setbattleflag "min_npc_vendchat_distance", 0; // ======================= Configuration HERE ============================= .map$ = "prontera"; // map setarray .@x, 150,153,156,159,162; // x coordinates setarray .@y, 175,172,169,166,163,160,157,154,151,148,145,142,139,136,133; // y coordinates .slotperpage = 20; // display how many slots per page (prevent making the menu too long) freeloop true; setcell .map$, 0,0, 500,500, cell_novending, true; .@x_size = getarraysize( .@x ); .@y_size = getarraysize( .@y ); for ( .@i = 0; .@i < .@y_size; ++.@i ) { for ( .@j = 0; .@j < .@x_size; ++.@j ) { if ( checkcell( .map$, .@x[.@j], .@y[.@i], cell_chkpass ) ) { movenpc "#vend_slot"+ .count, .@x[.@j], .@y[.@i]; setcell .map$, .@x[.@j], .@y[.@i], .@x[.@j], .@y[.@i], cell_novending, false; if ( getareausers( .map$, .@x[.@j], .@y[.@i], .@x[.@j], .@y[.@i] ) ) { hideonnpc "#vend_slot"+ .count; donpcevent "#vend_slot"+ .count +"::OnCheckAvailable"; } ++.count; } } } .maxpage = .count / .slotperpage + ( .count % .slotperpage > 0 ) -1; // debugmes "Vendor NPC needed -> "+ .count; end; } - script vend_slot FAKE_NPC,{ mes "[Vending Slot]"; if ( !getskilllv( "MC_VENDING" ) ) { mes "You dont have ^0055FFVending Skill^000000."; close; } getmapxy .@map$, .@x, .@y, BL_NPC; if ( getareausers( .@map$, .@x, .@y, .@x, .@y ) ) { mes "Someone already using this slot"; close; } // unitwalk getcharid(3), .@x, .@y; warp strcharinfo(3), .@x, .@y; mes "Spot : ^777777Available^000000"; mes "^0055FF[ Vending Area Rules ]^000000"; mes "^FF0000 ~ Use proper Shop Name.^000000"; mes "^777777Player who failed to follow these rules will be punished.^000000"; hideonnpc strnpcinfo(0); donpcevent strnpcinfo(0)+"::OnCheckAvailable"; close; OnCheckAvailable: sleep 10000; getmapxy .@map$, .@x, .@y, BL_NPC; while ( getareausers( .@map$, .@x, .@y, .@x, .@y ) ) sleep 10000; hideoffnpc strnpcinfo(0); end; } // Add more if needed. prontera,0,0,4 duplicate(vend_slot) #vend_slot0 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot1 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot2 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot3 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot4 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot5 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot6 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot7 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot8 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot9 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot10 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot11 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot12 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot13 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot14 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot15 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot16 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot17 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot18 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot19 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot20 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot21 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot22 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot23 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot24 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot25 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot26 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot27 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot28 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot29 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot30 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot31 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot32 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot33 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot34 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot35 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot36 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot37 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot38 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot39 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot40 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot41 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot42 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot43 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot44 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot45 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot46 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot47 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot48 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot49 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot50 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot51 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot52 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot53 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot54 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot55 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot56 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot57 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot58 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot59 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot60 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot61 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot62 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot63 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot64 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot65 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot66 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot67 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot68 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot69 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot70 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot71 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot72 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot73 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot74 4_BULLETIN_BOARD2 prontera,0,0,4 duplicate(vend_slot) #vend_slot75 4_BULLETIN_BOARD2
-
[Showcase + Demo] Ongoing - Ragnarok Redefinition
Cyborg replied to Rivers's topic in Spriting & Palette Showcase
hi what client support this? -
same error any update for this?
-
nice i like this prontera map this release at soon?
-
thanks for help me but I need this in src because I have a script that needs this patch code
-
i have a error for recompile i do no why missing here a code o simbol can you help me to fix it itemmap diff patch Index: doc/sample/npc_getitem_map.txt =================================================================== --- doc/sample/npc_getitem_map.txt (revision 0) +++ doc/sample/npc_getitem_map.txt (working copy) @@ -0,0 +1,24 @@ +// Sample NPC to test the custom getitem_map script command +// Script and command created by Xantara +prontera,156,170,3 script getitem_map test 120,{ + mes "input item id"; + next; + input .@id; + mes "input item amount"; + next; + input .@amt; + mes "input type:"; + mes "0=everyone, 1=party, 2=guild 3=bg"; + next; + input .@t; + //getitem_map .@id,.@amt,strcharinfo(3),.@t,((.@t==1) ? getcharid(1) : (.@t==2) ? getcharid(2) : getcharid(4)); + switch(.@t) + { + case 1: set .@type_id, getcharid(1); break; + case 2: set .@type_id, getcharid(2); break; + case 3: set .@type_id, getcharid(4); break; + } + getitem_map .@id,.@amt,strcharinfo(3),.@t,.@type_id; + mes "done"; + close; +} Index: doc/sample/npc_getitem_map.txt =================================================================== --- doc/sample/npc_getitem_map.txt (revision 0) +++ doc/sample/npc_getitem_map.txt (working copy) Property changes on: doc/sample/npc_getitem_map.txt ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: doc/script_commands.txt =================================================================== --- doc/script_commands.txt (revision 17062) +++ doc/script_commands.txt (working copy) @@ -4259,6 +4259,34 @@ --------------------------------------- +*getitem_map <item id>,<amount>,"<mapname>"{,<type>,<ID for Type>}; + +This command will give a specific amount of specified items to the players on the specified map. + +Works similarly to getitem but for multiple players on certain map. +Negative ID numbers also apply. However item name is currently not supported. + +Those parameters that are different from 'getitem' are: + mapname - Map name of the players to give the item(s) too + type - Optional. + Type 0 = everyone on the map (default) + 1 = specific party and their members on the map + 2 = specific guild and their members on the map + 3 = specific battleground team and their members on the map + ID for Type - Only needed if type is not 0 + If type = 1, ID is Party ID + If type = 2, ID is Guild ID + If type = 3, ID is Battleground ID + +If type is given, party members who are offline or are not on the specific map do not get the item. +Same for guild members. If BG ID is not found, it will not give to any players. + +This transaction is logged if the log script generated transactions option is enabled. + +Created by Xantara + +--------------------------------------- + *getnameditem <item id>,<character name|character ID>; *getnameditem "<item name>",<character name|character ID>; Index: src/map/atcommand.c =================================================================== --- src/map/atcommand.c (revision 17062) +++ src/map/atcommand.c (working copy) @@ -1297,8 +1297,117 @@ } /*========================================== - * + * 0 = @itemmap <item id/name> {<amount>} + * 1 = @itemmap1 <item id/name> <amount>, <party name> + * 2 = @itemmap2 <item id/name> <amount>, <guild name> + * [Xantara] *------------------------------------------*/ +ACMD_FUNC(itemmap) +{ + char item_name[100], party_name[NAME_LENGTH], guild_name[NAME_LENGTH]; + int amount, get_type = 0, flag = 0, get_count, i, map; + struct item it; + struct item_data *item_data; + struct party_data *p; + struct guild *g; + struct s_mapiterator *iter = NULL; + struct map_session_data *pl_sd = NULL; + + nullpo_retr(-1, sd); + + memset(item_name, '\0', sizeof(item_name)); + memset(party_name, '\0', sizeof(party_name)); + memset(guild_name, '\0', sizeof(guild_name)); + + if (strstr(command, "1") != NULL) + get_type = 1; + else if (strstr(command, "2") != NULL) + get_type = 2; + + if (!message || !*message || + get_type == 0 && sscanf(message, "\"%99[^\"]\" %d", item_name, &amount) < 1 + && sscanf(message, "%99s %d", item_name, &amount) < 1 ) + { + clif_displaymessage(fd, "Please, enter an item name/id (usage: @itemmap <item name or ID> {amount})."); + return -1; + } + if ( get_type == 1 && sscanf(message, "\"%99[^\"]\" %d, %23[^\n]", item_name, &amount, party_name) < 2 + && sscanf(message, "%99s %d, %23[^\n]", item_name, &amount, party_name) < 2 ) + { + clif_displaymessage(fd, "Please, enter an item name/id (usage: @itemmap1 <item id/name> <amount>, <party name>)."); + return -1; + } + if ( get_type == 2 && sscanf(message, "\"%99[^\"]\" %d, %23[^\n]", item_name, &amount, guild_name) < 2 + && sscanf(message, "%99s %d, %23[^\n]", item_name, &amount, guild_name) < 2 ) + { + clif_displaymessage(fd, "Please, enter an item name/id (usage: @itemmap2 <item id/name> <amount>, <guild name>)."); + return -1; + } + + if ((item_data = itemdb_searchname(item_name)) == NULL && + (item_data = itemdb_exists(atoi(item_name))) == NULL) + { + clif_displaymessage(fd, msg_txt(19)); // Invalid item ID or name. + return -1; + } + + if (amount <= 0) + amount = 1; + + map = sd->bl.m; + + memset(&it,0,sizeof(it)); + it.nameid = item_data->nameid; + if(!flag) + it.identify = 1; + else + it.identify = itemdb_isidentified(item_data->nameid); + + if (!itemdb_isstackable(item_data->nameid)) + get_count = 1; + else + get_count = amount; + + switch(get_type) + { + case 1: + if( (p = party_searchname(party_name)) == NULL ) + { + clif_displaymessage(fd, msg_txt(96)); // Incorrect name or ID, or no one from the party is online. + return -1; + } + for( i=0; i < MAX_PARTY; i++ ) + if( p->data[i].sd && map == p->data[i].sd->bl.m ) + pc_getitem_map(p->data[i].sd,it,amount,get_count,LOG_TYPE_COMMAND); + break; + case 2: + if( (g = guild_searchname(guild_name)) == NULL ) + { + clif_displaymessage(fd, msg_txt(94)); // Incorrect name/ID, or no one from the guild is online. + return -1; + } + for( i=0; i < g->max_member; i++ ) + if( g->member[i].sd && map == g->member[i].sd->bl.m ) + pc_getitem_map(g->member[i].sd,it,amount,get_count,LOG_TYPE_COMMAND); + break; + default: + iter = mapit_getallusers(); + for (pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter)) { + if( map != pl_sd->bl.m ) + continue; + pc_getitem_map(pl_sd,it,amount,get_count,LOG_TYPE_COMMAND); + } + mapit_free(iter); + break; + } + + clif_displaymessage(fd, msg_txt(18)); // Item created. + return 0; +} + +/*========================================== + * itemreset + *------------------------------------------*/ ACMD_FUNC(itemreset) { int i; @@ -8849,6 +8958,10 @@ ACMD_DEF(heal), ACMD_DEF(item), ACMD_DEF(item2), + ACMD_DEF(itemmap), + ACMD_DEF2("itemmap1", itemmap), + ACMD_DEF2("itemmap2", itemmap), + ACMD_DEF2("itemmap3", itemmap), ACMD_DEF(itemreset), ACMD_DEF(clearstorage), ACMD_DEF(cleargstorage), Index: src/map/pc.c =================================================================== --- src/map/pc.c (revision 17062) +++ src/map/pc.c (working copy) @@ -4009,6 +4009,32 @@ return 1; } +/*------------------------------------------ + * pc_getitem_map [Xantara] + *------------------------------------------*/ +int pc_getitem_map(struct map_session_data *sd,struct item it,int amt,int count,e_log_pick_type log_type) +{ + int i, flag; + + nullpo_ret(sd); + + for ( i = 0; i < amt; i += count ) + { + if ( !pet_create_egg(sd,it.nameid) ) + { // if not pet egg + if ( flag = pc_additem(sd,&it,count,log_type) ) + { + clif_additem(sd, 0, 0, flag); + if( pc_candrop(sd,&it) ) + map_addflooritem(&it,count,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0); + } + } + } + + log_pick_pc(sd, log_type, -amt, &sd->status.inventory[i]); + return 1; +} + /*========================================== * Check if item is usable. * Return: Index: src/map/pc.h =================================================================== --- src/map/pc.h (revision 17062) +++ src/map/pc.h (working copy) @@ -725,6 +725,7 @@ int pc_putitemtocart(struct map_session_data *sd,int idx,int amount); int pc_getitemfromcart(struct map_session_data *sd,int idx,int amount); int pc_cartitem_amount(struct map_session_data *sd,int idx,int amount); +int pc_getitem_map(struct map_session_data *sd,struct item it,int amt,int count,e_log_pick_type log_type); // [Xantara] int pc_takeitem(struct map_session_data*,struct flooritem_data*); int pc_dropitem(struct map_session_data*,int,int); Index: src/map/script.c =================================================================== --- src/map/script.c (revision 17062) +++ src/map/script.c (working copy) @@ -6474,6 +6474,122 @@ return 0; } +/*==================================================================== + [Xantara] + *getitem_map <item id>,<amount>,"<mapname>"{,<type>,<ID for Type>}; + type: 0=everyone, 1=party, 2=guild, 3=bg + =====================================================================*/ +static int buildin_getitem_map_sub(struct block_list *bl,va_list ap) +{ + struct item it; + struct guild *g = NULL; + struct party_data *p = NULL; + + int amt,count; + TBL_PC *sd = (TBL_PC *)bl; + + it = va_arg(ap,struct item); + amt = va_arg(ap,int); + count = va_arg(ap,int); + + pc_getitem_map(sd,it,amt,count,LOG_TYPE_SCRIPT); + + return 0; +} + +BUILDIN_FUNC(getitem_map) +{ + struct item it; + struct guild *g = NULL; + struct party_data *p = NULL; + struct battleground_data *bg = NULL; + struct script_data *data; + + int m,i,get_count,nameid,amount,flag=0,type=0,type_id=0; + const char *mapname; + + data = script_getdata(st,2); + get_val(st,data); + if( data_isstring(data) ) + { + const char *name = conv_str(st,data); + struct item_data *item_data = itemdb_searchname(name); + if( item_data ) + nameid = item_data->nameid; + else + nameid = UNKNOWN_ITEM_ID; + } + else + nameid = conv_num(st,data); + + if( (amount = script_getnum(st,3)) <= 0 ) + return 0; + + mapname = script_getstr(st,4); + if( (m = map_mapname2mapid(mapname)) < 0 ) + return 0; + + if( script_hasdata(st,5) ){ + type = script_getnum(st,5); + type_id = script_getnum(st,6); + } + + if(nameid < 0) { + nameid = itemdb_searchrandomid(-nameid); + flag = 1; + } + + if( nameid <= 0 || !itemdb_exists(nameid) ){ + ShowError("buildin_getitem_map: Nonexistant item %d requested.\n", nameid); + return 1; //No item created. + } + + memset(&it,0,sizeof(it)); + it.nameid = nameid; + if(!flag) + it.identify = 1; + else + it.identify = itemdb_isidentified(nameid); + + if (!itemdb_isstackable(nameid)) + get_count = 1; + else + get_count = amount; + + switch(type) + { + case 1: + if( (p = party_search(type_id)) != NULL ) + { + for( i=0; i < MAX_PARTY; i++ ) + if( p->data[i].sd && m == p->data[i].sd->bl.m ) + pc_getitem_map(p->data[i].sd,it,amount,get_count,LOG_TYPE_SCRIPT); + } + break; + case 2: + if( (g = guild_search(type_id)) != NULL ) + { + for( i=0; i < g->max_member; i++ ) + if( g->member[i].sd && m == g->member[i].sd->bl.m ) + pc_getitem_map(g->member[i].sd,it,amount,get_count,LOG_TYPE_SCRIPT); + } + break; + case 3: + if( (bg = bg_team_search(type_id)) != NULL ) + { + for( i=0; i < MAX_BG_MEMBERS; i++ ) + if( bg->members[i].sd && m == bg->members[i].sd->bl.m ) + pc_getitem_map(bg->members[i].sd,it,amount,get_count,LOG_TYPE_SCRIPT); + } + break; + default: + map_foreachinmap(buildin_getitem_map_sub,m,BL_PC,it,amount,get_count); + break; + } + + return 0; +} + /*========================================== * rentitem <item id>,<seconds> * rentitem "<item name>",<seconds> @@ -17364,6 +17480,7 @@ BUILDIN_DEF(getitem,"vi?"), BUILDIN_DEF(rentitem,"vi"), BUILDIN_DEF(getitem2,"viiiiiiii?"), + BUILDIN_DEF(getitem_map,"iis??"), BUILDIN_DEF(getnameditem,"vv"), BUILDIN_DEF2(grouprandomitem,"groupranditem","i"), BUILDIN_DEF(makeitem,"visii"),
-
Tanong paano po malaman yung trunk version
Cyborg replied to Cyborg's topic in Tulong para sa Server
kapag @version mo ito lumalabas "Cannot determine SVN/Git version." ano po ibig sabihin yan? -
saan po makikita yung trunk version?
-
any update for latest svn? i have error for this old diff
-
he is already working but how to change him that will save time then they can exchange items here?
-
but he hasn't worked yet, he doesn't want to add an hour to the script as if he's missing something.
-
I don't know what he is for, can you help me what the code is for because the hour on char still doesn't want to enter