- script Plant_MainEvent::PMES -1,{ function sFreash ; function sINVISIBLE ; OnInit: sFreash; sINVISIBLE; Initnpctimer; end; OnTimer3600000: sFreash; Initnpctimer; end; OnWhisperGlobal: if(getgmlevel()<99) end; if(compare(@whispervar0$,"clean")) { dispbottom "Clean all plant data in SQL"; query_sql "DELETE FROM `plant_system` "; } if(compare(@whispervar0$,"freash")) { dispbottom "Freash all plant data in SQL"; sFreash; } end; function sFreash { //query_sql "UPDATE `plant_system` SET `water` = `water` + 1 WHERE `status` != 4"; //query_sql "UPDATE `plant_system` SET `water` = `water` + 5 WHERE `status` = 4"; //query_sql "UPDATE `plant_system` SET `nutrient1` = `nutrient1` - 11"; query_sql "UPDATE `plant_system` SET `times` = `times` + 1"; query_sql "DELETE FROM `plant_system` WHERE `status` = 0 || `status` = 2 || `water` > 20 || `water` <= 0 || `nutrient1` <= 0"; query_sql "UPDATE `plant_system` SET `type` = `type` + 1 WHERE ( `type` % 5 != 0 && `times` / 24 >= ( `type` % 5 ) * 3 && `nutrient1` >=75 )"; return; } function sINVISIBLE { query_sql "UPDATE `plant_system` SET `status` = 3 WHERE `status` != 4"; return; } } function script Plant_Menu { function cc { if(getitemname(getarg(0,0))=="") { mes "Error Item ID.["+getarg(0,0)+"]"; close; } return ""+(countitem(getarg(0))>0?"^0000FF":"^C8C8C8")+getitemname(getarg(0))+"^000000"; } getitem 17504,1; switch(prompt("[Status]","[Plant]","[Sprinkle]","[Apply]","[Pluck]","[Visible]","[Exclude]","[Move\\Put]")) { case 1: callfunc "Plant_MainFunction",5,select("[All myself]","[Type location]","[Type owner name]"); case 2: callfunc "Plant_MainFunction",3,100+select(""+cc(6210),""+cc(6211),""+cc(6212),""+cc(6272),""+cc(6273),""+cc(7140)); case 3: callfunc "Plant_MainFunction",1; case 4: doevent "PMESdyn_shop1::OnDo"; close; case 5: callfunc "Plant_MainFunction",4; case 6: case 7: case 8: callfunc "Plant_MainFunction",@menu; default: close; } } function script Plant_MainFunction { //====================================================================== function plant_dead ; function cClean ; function Plant_Motion ; function gd ; function c0 ; cClean; Plant_Motion(getarg(0,0),getarg(1,0)); cClean; set planttimerdelay,gettimetick(2)+20; close; //====================================================================== Onpbar: //progressbar 0x000000,c0(gd(getarg(0),5,5,40,60),5); return; //====================================================================== function Plant_Motion { function date_tran ; function ch_distance ; function ch_item ; function path_number ; function cStatus ; function cPatch ; function cMapX ; function cMapA ;//npc周圍內不可以有植物 /*if(gettimetick(2)-planttimerdelay<10)//延遲,稍微紓緩數據庫 { mes "Please wait "+(10-gettimetick(2)+planttimerdelay)+" seconds"; close; }*/ if(getarg(0)==6||getarg(0)==7)//將植物顯示出來 { if(getarg(0)!=7) query_sql "DELETE FROM `plant_system` WHERE `owner` = "+getcharid(0)+" && ( `status` = 0 || `status` = 2 )"; query_sql "SELECT plant_id,gid,map,x,y,nickname,type FROM `plant_system` WHERE `owner` = "+getcharid(0)+"",@plid2,@gid,@map$,@x,@y,@nickname$,@type; if(getarg(0)==7) { for(set .@i,0;@map$[.@i]!="";set .@i,.@i+1) { if(getmapflag(@map$[.@i],mf_gvg)||getmapflag(@map$[.@i],mf_pvp)||getmapflag(@map$[.@i],mf_battleground)||compare(@map$[.@i],"g_cas")||compare(@map$[.@i],"guild")|| cMapX(@map$[.@i],"alde_gld","gef_fild13","pay_gld","prt_gld","aru_gld","sch_gld")|| cMapA(@map$[.@i],@x[.@i],@y[.@i])) continue; areawarp @map$[.@i],@x[.@i]-5,@y[.@i]-5,@x[.@i]+5,@y[.@i]+5,"prontera",131,167; } return; } query_sql "UPDATE `plant_system` set `status` = 1 WHERE ( `owner` = "+getcharid(0)+" && `status` != 4 ) "; for(set .@i,0;@map$[.@i]!="";set .@i,.@i+1) { unitkill @gid[.@i]; if(!checkcell(@map$[.@i],@x[.@i],@y[.@i],cell_chkpass)) continue; set .@gid,bg_monster(0,@map$[.@i],@x[.@i],@y[.@i],""+(@nickname$[.@i]==""?strcharinfo(0):@nickname$[.@i]),date_tran(@type[.@i]),""); query_sql "UPDATE `plant_system` set `gid` = "+.@gid+" WHERE `plant_id` = "+@plid2[.@i]; } if(!.@i) { mes "NULL"; } return; } if(getarg(0)==5)//顯示所有植物的狀態 { if(getarg(1)==1) { query_sql "SELECT plant_id,type,status,water,nutrient1,nutrient2,nutrient3,nutrient4,nickname,location FROM `plant_system` WHERE `owner` = "+getcharid(0),@plid2,@type,@status,@water,@nutrient1,@nutrient2,@nutrient3,@nutrient4,@nickname$,@location$; }else if(getarg(1)==2){//用座標查其他人的植物id mes "Type location"; mes "(ex : 'prontera-150-180')"; mes "(ex : 'prontera-070-001')"; input @location$; query_sql "SELECT `plant_id` FROM `plant_system` WHERE `location` = '"+escape_sql(@loction$)+"'",@plid2; if(!@plid2) { mes "NULL"; return; } next; mes "[ id : "+@plid2+" ]"; return; }else{ mes "Type owner name."; input @name$; query_sql "SELECT `char_id` FROM `char` WHERE `name` = '"+escape_sql(@name$)+"'",.@cid; if(!.@cid) { mes "NULL"; return; } query_sql "SELECT location FROM `plant_system` WHERE `owner` = "+.@cid,@location$; if(!getarraysize(@location$)) { mes "NULL"; return; } mes "[ location ]"; dispbottom "====================[Plant]===================="; for(set .@i,0;@location$[.@i]!="";set .@i,.@i+1) dispbottom ""+@location$[.@i]; dispbottom "==============================================="; return; } set .@num,getarraysize(@type); if(!.@num) { mes "NULL"; return; } mes "[id]"; mes "[nickname]"; mes "[location]"; mes "[status]"; mes "[water]"; mes "[nutrient1][...2][...3][...4]"; next; dispbottom "====================[Plant]===================="; for(set .@i,0;.@i<.@num;set .@i,.@i+1) { dispbottom "["+@plid2[.@i]+"]["+@nickname$[.@i]+"]["+@location$[.@i]+"][s:"+(@status[.@i]==0?"Dead":@status[.@i]==1?"Alive":@status[.@i]==2?"Picked":@status[.@i]==3?"Invisible":"Moving")+"][w:"+@water[.@i]+"]["+@nutrient1[.@i]+"]["+@nutrient2[.@i]+"]["+@nutrient3[.@i]+"]["+@nutrient4[.@i]+"]"; } dispbottom "==============================================="; return; } if(getarg(0)!=3) { if(getarg(0)==1) { if(!ch_item(523,1)) return; } mes "input plant-id"; input @plid; query_sql "SELECT owner,map,x,y FROM `plant_system` WHERE `plant_id` = "+@plid,@cid,@map$,@x,@y; if(@cid==0) { mes "Wrong id"; return; } set .@u,cStatus(@plid); if(.@u!=4) { if(cStatus(@plid)!=1&&getarg(0)!=3) { mes "Your pleant status must be 'alive'"; return; } if(ch_distance()) return; } query_sql "SELECT gid,water,nutrient1,nutrient2,nutrient3,nutrient4 FROM `plant_system` WHERE `plant_id` = "+@plid,@gid,@water,@nutrient1,@nutrient2,@nutrient3,@nutrient4; } set planttimerdelay,gettimetick(2)+20; switch(getarg(0)) { default: mes "Error type :"+getarg(0); break; case 8://移植 if(select("[Move]","[Put]")==1) { if(cStatus(@plid)==4) { mes "Already in moving status."; return; } unitkill @gid; query_sql "UPDATE `plant_system` SET `status` = 4 WHERE `plant_id` = "+@plid; return; }else{ if(cStatus(@plid)!=4) { mes "Not in moving status."; return; } getmapxy(.@m$,.@x,.@y,0); set .@loction$,""+.@m$+"_"+path_number(.@x)+"_"+path_number(.@y); query_sql "UPDATE `plant_system` SET `status` = 3 WHERE `plant_id` = "+@plid; query_sql "UPDATE `plant_system` SET `location` = '"+escape_sql(.@loction$)+"' WHERE `plant_id` = "+@plid; query_sql "UPDATE `plant_system` SET `map` = '"+escape_sql(.@m$)+"' WHERE `plant_id` = "+@plid; query_sql "UPDATE `plant_system` SET `x` = "+.@x+" WHERE `plant_id` = "+@plid; query_sql "UPDATE `plant_system` SET `y` = "+.@y+" WHERE `plant_id` = "+@plid; mes "Moving is complete, please use 'visible' to show it."; return; } return; case 1://澆水.//每次水需求-1.//水低於0或高過20時,植物死亡. callsub Onpbar,getarg(0); if(!ch_item(523,1)||ch_distance()) break; set @water,@water-1; if(@water<0) plant_dead(@plid); else query_sql "UPDATE `plant_system` set water = "+@water+" where `plant_id` = "+@plid; specialeffect2 86; delitem 523,1; break; case 2://施肥.//因肥料不同+值也不同.//基本.生命.精神.繁衍//基本低於0時,植物死亡. callsub Onpbar,getarg(0); if(ch_distance()||!ch_item(getarg(1),1)||getarg(1)==17504) break; if(select("Use["+getitemname(getarg(1))+"]","Leave")==2) break; query_sql "SELECT nutrient1,nutrient2,nutrient3,nutrient4 FROM `plant_system_database` WHERE `item_id` = "+getarg(1),@nutrient_1,@nutrient_2,@nutrient_3,@nutrient_4; if(@nutrient1) { set @nutrient_1,cPatch(@nutrient1+10); set @nutrient_2,cPatch(@nutrient2+@nutrient_2); set @nutrient_3,cPatch(@nutrient3+@nutrient_3); set @nutrient_4,cPatch(@nutrient4+@nutrient_4); query_sql "UPDATE `plant_system` SET `nutrient1` = "+@nutrient_1+" WHERE `plant_id` = "+@plid; query_sql "UPDATE `plant_system` SET `nutrient2` = "+@nutrient_2+" WHERE `plant_id` = "+@plid; query_sql "UPDATE `plant_system` SET `nutrient3` = "+@nutrient_3+" WHERE `plant_id` = "+@plid; query_sql "UPDATE `plant_system` SET `nutrient4` = "+@nutrient_4+" WHERE `plant_id` = "+@plid; } delitem getarg(1),1; break; case 3://播種.//同位置不可以種兩個 if(!ch_item(date_tran(getarg(1)),1)) break; query_sql "SELECT `plant_id` FROM `plant_system` WHERE `owner` = "+getcharid(0)+"",@plid2; if(getarraysize(@plid2)>=127) { mes "You can't plant more than 127."; break; }else deletearray @plid2[0],128; getmapxy(@map$,@x,@y,0); set @loction$,""+@map$+"_"+path_number(@x)+"_"+path_number(@y); query_sql "SELECT `plant_id` FROM `plant_system` WHERE `location` = '"+escape_sql(@loction$)+"'",@plid2; if(@plid2) { mes "Don't put a seed on other plant."; break; } callsub Onpbar,getarg(0); if(!ch_item(date_tran(getarg(1)),1)||cMapA(@map$,@x,@y)||getmapflag(@map$,mf_pvp)||getmapflag(@map$,mf_gvg)||getmapflag(@map$,mf_battleground)||compare(@map$,"guild")) break; delitem date_tran(getarg(1)),1; mes "Input nick name(NULL=none)"; input @nickname$; if(@nickname$=="NULL")set @nickname$,""; set .@gid,bg_monster(0,@map$,@x,@y,""+strcharinfo(0),date_tran(set(.@u,(getarg(1)-101)*5+1)),""); //status=0:死亡;1:活著;2:被拔走;3:隱藏;4:移植中 query_sql "INSERT `plant_system` VALUES(NULL,"+getcharid(0)+","+.@gid+",'"+escape_sql(@loction$)+"','"+escape_sql(@map$)+"',"+@x+","+@y+","+.@u+",1,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,'"+escape_sql(@nickname$)+"')"; mes "Next time you 'visible', name will change to you set."; break; case 4://採收. callsub Onpbar,getarg(0); if(ch_distance()) break; query_sql "SELECT times FROM `plant_system` WHERE `plant_id` = "+@plid,@times; if(@times>120) { getitem 5013,1; }else if(24<=@times&&@times<=120){ getitem 607,1; }else{ getitem rand(507,511),rand(4,7); } plant_dead(@plid); break; } return; //====================================================================== function date_tran { if(getarg(0)<100) return c0(gd(getarg(0),2999,2993,2987,2981,2975, //1:荊棘 2998,2992,2986,2980,2974, //2:吸血 2997,2991,2985,2979,2973, //3:炸彈 2996,2990,2984,2978,2972, //4:實驗 2995,2989,2983,2977,2971, //5:變形 2994,2988,2982,2976,2970, //6:生命 2969,2968,2967,2966,2965),2999); //S else if(1003) { mes "You leave that plant too far."; return 1; } return 0; } function ch_item { for(set .@i,0;getarg(.@i,0);set .@i,.@i+2) if(countitem(getarg(.@i))=500) return 500; return getarg(0); } function cMapX { while(getarg(set(.@i,.@i+1),"")!="") if(getarg(0)==getarg(.@i)) return 1; return 0; } function cMapA { query_sql "SELECT `item_id` FROM `plant_system_database` WHERE (`code` = '"+escape_sql(getarg(0))+"' && `nutrient1`-2 <= "+getarg(1)+" && `nutrient2`-2 <= "+getarg(2)+" && "+getarg(1)+" <= `nutrient1`+2 && "+getarg(2)+" <= `nutrient2`+2 )",.@item_id; if(.@item_id) return 1; else return 0; } } - script PMESdyn_shop1 -1,{ OnDo: callshop "dyn_shop1",2; npcshopattach "dyn_shop1"; end; OnSellItem: callfunc "Plant_MainFunction",2,@sold_nameid[0]; end; } - shop dyn_shop1 -1,501:50