Jump to content

Cyborg

Members
  • Posts

    54
  • Joined

  • Last visited

Everything posted by Cyborg

  1. im done but i want to change a 12/12 on client to 15/15 you can help for this?
  2. How to change 15 > 12 to 15 > 15 Thank you for your help.
  3. Cyborg

    H>disguise

    okay i will try thanks for your advice i will feedback later if work
  4. Cyborg

    H>disguise

    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
  5. Cyborg

    H>disguise

    if I erase him, he won't hide because I have to hide, but his round will end in 10 rounds
  6. Cyborg

    H>disguise

    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; }
  7. where find this script npc Chief Officer on prontera thank you for advice
  8. 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
  9. nice i like this prontera map this release at soon?
  10. thanks for help me but I need this in src because I have a script that needs this patch code
  11. 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"),
  12. kapag @version mo ito lumalabas "Cannot determine SVN/Git version." ano po ibig sabihin yan?
  13. any update for latest svn? i have error for this old diff
  14. he is already working but how to change him that will save time then they can exchange items here?
  15. but he hasn't worked yet, he doesn't want to add an hour to the script as if he's missing something.
  16. 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
  17. if (rand(100) < 10) setarray .@i[0],6232,6228,13710,12916,5184,5199,5209,5762,5467; // 10% chance else if (rand(100) < 20) setarray .@i[0],12884,12885,12886,12887,35078; // 20% chance else setarray .@i[0],13698,13697,14175,14587,12920,12921,14192,16504,12922,7776,12412,35111; // 70% chance set FHitem,.@i[rand(getarraysize(.@i))]; getitem FHitem,1; .@remain = 0; like this?
×
×
  • Create New...