groupcore.pwn 306 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658
  1. /*
  2. /$$ /$$ /$$$$$$ /$$$$$$$ /$$$$$$$
  3. | $$$ | $$ /$$__ $$ | $$__ $$| $$__ $$
  4. | $$$$| $$| $$ \__/ | $$ \ $$| $$ \ $$
  5. | $$ $$ $$| $$ /$$$$ /$$$$$$| $$$$$$$/| $$$$$$$/
  6. | $$ $$$$| $$|_ $$|______/| $$__ $$| $$____/
  7. | $$\ $$$| $$ \ $$ | $$ \ $$| $$
  8. | $$ \ $$| $$$$$$/ | $$ | $$| $$
  9. |__/ \__/ \______/ |__/ |__/|__/
  10. Dynamic Group Core
  11. Next Generation Gaming, LLC
  12. (created by Next Generation Gaming Development Team)
  13. * Copyright (c) 2016, Next Generation Gaming, LLC
  14. *
  15. * All rights reserved.
  16. *
  17. * Redistribution and use in source and binary forms, with or without modification,
  18. * are not permitted in any case.
  19. *
  20. *
  21. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  22. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  23. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  24. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  25. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  26. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  27. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  28. * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  29. * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  30. * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  31. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  32. */
  33. #include <YSI\y_hooks>
  34. Group_DisbandGroup(iGroupID) {
  35. new
  36. i = 0,
  37. szQuery[128];
  38. arrGroupData[iGroupID][g_iAllegiance] = 0;
  39. arrGroupData[iGroupID][g_iBugAccess] = INVALID_RANK;
  40. arrGroupData[iGroupID][g_iFindAccess] = INVALID_RANK;
  41. arrGroupData[iGroupID][g_iRadioAccess] = INVALID_RANK;
  42. arrGroupData[iGroupID][g_iDeptRadioAccess] = INVALID_RANK;
  43. arrGroupData[iGroupID][g_iIntRadioAccess] = INVALID_RANK;
  44. arrGroupData[iGroupID][g_iGovAccess] = INVALID_RANK;
  45. arrGroupData[iGroupID][g_iTreasuryAccess] = INVALID_RANK;
  46. arrGroupData[iGroupID][g_iFreeNameChange] = INVALID_RANK;
  47. arrGroupData[iGroupID][g_iFreeNameChangeDiv] = INVALID_DIVISION;
  48. arrGroupData[iGroupID][g_iSpikeStrips] = INVALID_RANK;
  49. arrGroupData[iGroupID][g_iBarricades] = INVALID_RANK;
  50. arrGroupData[iGroupID][g_iCones] = INVALID_RANK;
  51. arrGroupData[iGroupID][g_iFlares] = INVALID_RANK;
  52. arrGroupData[iGroupID][g_iBarrels] = INVALID_RANK;
  53. arrGroupData[iGroupID][g_iLadders] = INVALID_RANK;
  54. arrGroupData[iGroupID][g_iTapes] = INVALID_RANK;
  55. arrGroupData[iGroupID][g_iBudget] = 0;
  56. arrGroupData[iGroupID][g_iBudgetPayment] = 0;
  57. arrGroupData[iGroupID][g_fCratePos][0] = 0;
  58. arrGroupData[iGroupID][g_fCratePos][1] = 0;
  59. arrGroupData[iGroupID][g_fCratePos][2] = 0;
  60. arrGroupData[iGroupID][g_szGroupName][0] = 0;
  61. arrGroupData[iGroupID][g_hDutyColour] = 0xFFFFFF;
  62. arrGroupData[iGroupID][g_hRadioColour] = 0xFFFFFF;
  63. arrGroupData[iGroupID][g_iMemberCount] = 0;
  64. arrGroupData[iGroupID][g_iGroupToyID] = 0;
  65. arrGroupData[iGroupID][g_iMaterials] = 0;
  66. arrGroupData[iGroupID][g_iDrugs][0] = 0;
  67. arrGroupData[iGroupID][g_iDrugs][1] = 0;
  68. arrGroupData[iGroupID][g_iDrugs][2] = 0;
  69. arrGroupData[iGroupID][g_iDrugs][3] = 0;
  70. arrGroupData[iGroupID][g_iDrugs][4] = 0;
  71. szMiscArray[0] = 0;
  72. format(szMiscArray, sizeof(szMiscArray), "UPDATE `gWeaponsNew` SET `1` = '0'");
  73. for(new x = 2; x < 47; x++) format(szMiscArray, sizeof(szMiscArray), "%s, `%d` = '0'", szMiscArray, x);
  74. mysql_format(MainPipeline, szMiscArray, sizeof(szMiscArray), "%s WHERE `id` = '%d'", szMiscArray, iGroupID + 1);
  75. mysql_tquery(MainPipeline, szMiscArray, "OnQueryFinish", "ii", SENDDATA_THREAD, iGroupID);
  76. DestroyDynamic3DTextLabel(arrGroupData[iGroupID][g_tCrate3DLabel]);
  77. while(i < MAX_GROUP_DIVS) {
  78. arrGroupDivisions[iGroupID][i++][0] = 0;
  79. }
  80. i = 0;
  81. while(i < MAX_GROUP_RANKS) {
  82. arrGroupRanks[iGroupID][i][0] = 0;
  83. arrGroupData[iGroupID][g_iPaycheck][i++] = 0;
  84. }
  85. i = 0;
  86. while(i < MAX_GROUP_WEAPONS) {
  87. arrGroupData[iGroupID][g_iLockerGuns][i] = 0;
  88. arrGroupData[iGroupID][g_iLockerCost][i++] = 0;
  89. }
  90. i = 0;
  91. while(i < MAX_GROUP_LOCKERS) {
  92. DestroyDynamic3DTextLabel(arrGroupLockers[iGroupID][i][g_tLocker3DLabel]);
  93. arrGroupLockers[iGroupID][i][g_fLockerPos][0] = 0.0;
  94. arrGroupLockers[iGroupID][i][g_fLockerPos][1] = 0.0;
  95. arrGroupLockers[iGroupID][i][g_fLockerPos][2] = 0.0;
  96. arrGroupData[iGroupID][g_iLockerGuns][i] = 0;
  97. arrGroupData[iGroupID][g_iLockerCost][i++] = 0;
  98. }
  99. SaveGroup(iGroupID);
  100. for(new x; x < MAX_DYNAMIC_VEHICLES; x++)
  101. {
  102. if(DynVehicleInfo[x][gv_igID] != INVALID_GROUP_ID && DynVehicleInfo[x][gv_igID] == iGroupID)
  103. {
  104. DynVehicleInfo[x][gv_iModel] = 0;
  105. DynVehicleObjInfo[x][0][gv_iAttachedObjectModel] = INVALID_OBJECT_ID;
  106. DynVehicleObjInfo[x][1][gv_iAttachedObjectModel] = INVALID_OBJECT_ID;
  107. DynVehicleObjInfo[x][2][gv_iAttachedObjectModel] = INVALID_OBJECT_ID;
  108. DynVehicleObjInfo[x][3][gv_iAttachedObjectModel] = INVALID_OBJECT_ID;
  109. DynVehicleInfo[x][gv_igID] = INVALID_GROUP_ID;
  110. DynVehicleInfo[x][gv_igDivID] = 0;
  111. DynVehicleInfo[x][gv_fMaxHealth] = 1000;
  112. DynVehicleInfo[x][gv_iUpkeep] = 0;
  113. DynVehicleInfo[x][gv_iSiren] = 0;
  114. DynVeh_Save(x);
  115. DynVeh_Spawn(x);
  116. }
  117. }
  118. foreach(new x: Player)
  119. {
  120. if(PlayerInfo[x][pMember] == iGroupID || PlayerInfo[x][pLeader] == iGroupID) {
  121. SendClientMessageEx(x, COLOR_WHITE, "Your group has been disbanded by an administrator. All members have been automatically removed.");
  122. PlayerInfo[x][pLeader] = INVALID_GROUP_ID;
  123. PlayerInfo[x][pMember] = INVALID_GROUP_ID;
  124. PlayerInfo[x][pRank] = INVALID_RANK;
  125. PlayerInfo[x][pDivision] = INVALID_DIVISION;
  126. strcpy(PlayerInfo[x][pBadge], "None", 9);
  127. }
  128. if (PlayerInfo[x][pBugged] == iGroupID) PlayerInfo[x][pBugged] = INVALID_GROUP_ID;
  129. }
  130. mysql_format(MainPipeline, szQuery, sizeof szQuery, "DELETE FROM `groupbans` WHERE `GroupBan` = %i", iGroupID);
  131. mysql_tquery(MainPipeline, szQuery, "OnQueryFinish", "ii", SENDDATA_THREAD, iGroupID+1);
  132. mysql_format(MainPipeline, szQuery, sizeof szQuery, "UPDATE `accounts` SET `Member` = "#INVALID_GROUP_ID", `Leader` = "#INVALID_GROUP_ID", `Division` = "#INVALID_DIVISION", `Rank` = "#INVALID_RANK" WHERE `Member` = %i OR `Leader` = %i", iGroupID, iGroupID);
  133. return mysql_tquery(MainPipeline, szQuery, "OnQueryFinish", "ii", SENDDATA_THREAD, iGroupID);
  134. }
  135. forward SaveGroup(iGroupID);
  136. public SaveGroup(iGroupID) {
  137. if(!(0 <= iGroupID < MAX_GROUPS)) return 1;
  138. szMiscArray[0] = 0;
  139. new query[2048], i;
  140. format(query, 2048, "UPDATE `groups` SET ");
  141. //SaveString(query, "groups", iGroupID+1, "CLICKME", CLICKME);
  142. //SaveInteger(query, "groups", iGroupID+1, "CLICKME", CLICKME);
  143. //SaveFloat(query, "groups", iGroupID+1, "CLICKME", CLICKME);
  144. SaveInteger(query, "groups", iGroupID+1, "Type", arrGroupData[iGroupID][g_iGroupType]);
  145. SaveString(query, "groups", iGroupID+1, "Name", arrGroupData[iGroupID][g_szGroupName]);
  146. SaveString(query, "groups", iGroupID+1, "MOTD", gMOTD[iGroupID][0]);
  147. SaveString(query, "groups", iGroupID+1, "MOTD2", gMOTD[iGroupID][1]);
  148. SaveString(query, "groups", iGroupID+1, "MOTD3", gMOTD[iGroupID][2]);
  149. SaveInteger(query, "groups", iGroupID+1, "Allegiance", arrGroupData[iGroupID][g_iAllegiance]);
  150. SaveInteger(query, "groups", iGroupID+1, "Bug", arrGroupData[iGroupID][g_iBugAccess]);
  151. SaveInteger(query, "groups", iGroupID+1, "Find", arrGroupData[iGroupID][g_iFindAccess]);
  152. SaveInteger(query, "groups", iGroupID+1, "Radio", arrGroupData[iGroupID][g_iRadioAccess]);
  153. SaveInteger(query, "groups", iGroupID+1, "DeptRadio", arrGroupData[iGroupID][g_iDeptRadioAccess]);
  154. SaveInteger(query, "groups", iGroupID+1, "IntRadio", arrGroupData[iGroupID][g_iIntRadioAccess]);
  155. SaveInteger(query, "groups", iGroupID+1, "GovAnnouncement", arrGroupData[iGroupID][g_iGovAccess]);
  156. SaveInteger(query, "groups", iGroupID+1, "TreasuryAccess", arrGroupData[iGroupID][g_iTreasuryAccess]);
  157. SaveInteger(query, "groups", iGroupID+1, "FreeNameChange", arrGroupData[iGroupID][g_iFreeNameChange]);
  158. SaveInteger(query, "groups", iGroupID+1, "FreeNameChangeDiv", arrGroupData[iGroupID][g_iFreeNameChangeDiv]);
  159. SaveInteger(query, "groups", iGroupID+1, "DutyColour", arrGroupData[iGroupID][g_hDutyColour]);
  160. SaveInteger(query, "groups", iGroupID+1, "RadioColour", arrGroupData[iGroupID][g_hRadioColour]);
  161. SaveInteger(query, "groups", iGroupID+1, "Stock", arrGroupData[iGroupID][g_iLockerStock]);
  162. SaveFloat(query, "groups", iGroupID+1, "CrateX", arrGroupData[iGroupID][g_fCratePos][0]);
  163. SaveFloat(query, "groups", iGroupID+1, "CrateY", arrGroupData[iGroupID][g_fCratePos][1]);
  164. SaveFloat(query, "groups", iGroupID+1, "CrateZ", arrGroupData[iGroupID][g_fCratePos][2]);
  165. SaveInteger(query, "groups", iGroupID+1, "SpikeStrips", arrGroupData[iGroupID][g_iSpikeStrips]);
  166. SaveInteger(query, "groups", iGroupID+1, "Barricades", arrGroupData[iGroupID][g_iBarricades]);
  167. SaveInteger(query, "groups", iGroupID+1, "Cones", arrGroupData[iGroupID][g_iCones]);
  168. SaveInteger(query, "groups", iGroupID+1, "Flares", arrGroupData[iGroupID][g_iFlares]);
  169. SaveInteger(query, "groups", iGroupID+1, "Barrels", arrGroupData[iGroupID][g_iBarrels]);
  170. SaveInteger(query, "groups", iGroupID+1, "Ladders", arrGroupData[iGroupID][g_iLadders]);
  171. SaveInteger(query, "groups", iGroupID+1, "Tapes", arrGroupData[iGroupID][g_iTapes]);
  172. SaveInteger(query, "groups", iGroupID+1, "Budget", arrGroupData[iGroupID][g_iBudget]);
  173. SaveInteger(query, "groups", iGroupID+1, "BudgetPayment", arrGroupData[iGroupID][g_iBudgetPayment]);
  174. SaveInteger(query, "groups", iGroupID+1, "LockerCostType", arrGroupData[iGroupID][g_iLockerCostType]);
  175. SaveInteger(query, "groups", iGroupID+1, "CratesOrder", arrGroupData[iGroupID][g_iCratesOrder]);
  176. SaveInteger(query, "groups", iGroupID+1, "CrateIsland", arrGroupData[iGroupID][g_iCrateIsland]);
  177. SaveFloat(query, "groups", iGroupID+1, "GarageX", arrGroupData[iGroupID][g_fGaragePos][0]);
  178. SaveFloat(query, "groups", iGroupID+1, "GarageY", arrGroupData[iGroupID][g_fGaragePos][1]);
  179. SaveFloat(query, "groups", iGroupID+1, "GarageZ", arrGroupData[iGroupID][g_fGaragePos][2]);
  180. SaveInteger(query, "groups", iGroupID+1, "TackleAccess", arrGroupData[iGroupID][g_iTackleAccess]);
  181. SaveInteger(query, "groups", iGroupID+1, "WheelClamps", arrGroupData[iGroupID][g_iWheelClamps]);
  182. SaveInteger(query, "groups", iGroupID+1, "DoCAccess", arrGroupData[iGroupID][g_iDoCAccess]);
  183. SaveInteger(query, "groups", iGroupID+1, "MedicAccess", arrGroupData[iGroupID][g_iMedicAccess]);
  184. SaveInteger(query, "groups", iGroupID+1, "DMVAccess", arrGroupData[iGroupID][g_iDMVAccess]);
  185. SaveInteger(query, "groups", iGroupID+1, "TempNum", arrGroupData[iGroupID][gTempNum]);
  186. SaveInteger(query, "groups", iGroupID+1, "LEOArrest", arrGroupData[iGroupID][gLEOArrest]);
  187. SaveInteger(query, "groups", iGroupID+1, "OOCChat", arrGroupData[iGroupID][g_iOOCChat]);
  188. SaveInteger(query, "groups", iGroupID+1, "OOCColor", arrGroupData[iGroupID][g_hOOCColor]);
  189. SaveInteger(query, "groups", iGroupID+1, "Pot", arrGroupData[iGroupID][g_iDrugs][0]);
  190. SaveInteger(query, "groups", iGroupID+1, "Crack", arrGroupData[iGroupID][g_iDrugs][1]);
  191. SaveInteger(query, "groups", iGroupID+1, "Heroin", arrGroupData[iGroupID][g_iDrugs][4]);
  192. SaveInteger(query, "groups", iGroupID+1, "Syringes", arrGroupData[iGroupID][g_iSyringes]);
  193. SaveInteger(query, "groups", iGroupID+1, "Ecstasy", arrGroupData[iGroupID][g_iDrugs][3]);
  194. SaveInteger(query, "groups", iGroupID+1, "Meth", arrGroupData[iGroupID][g_iDrugs][2]);
  195. SaveInteger(query, "groups", iGroupID+1, "Mats", arrGroupData[iGroupID][g_iMaterials]);
  196. SaveInteger(query, "groups", iGroupID+1, "TurfCapRank", arrGroupData[iGroupID][g_iTurfCapRank]);
  197. SaveInteger(query, "groups", iGroupID+1, "PointCapRank", arrGroupData[iGroupID][g_iPointCapRank]);
  198. SaveInteger(query, "groups", iGroupID+1, "WithdrawRank", arrGroupData[iGroupID][g_iWithdrawRank][0]);
  199. SaveInteger(query, "groups", iGroupID+1, "WithdrawRank2", arrGroupData[iGroupID][g_iWithdrawRank][1]);
  200. SaveInteger(query, "groups", iGroupID+1, "WithdrawRank3", arrGroupData[iGroupID][g_iWithdrawRank][2]);
  201. SaveInteger(query, "groups", iGroupID+1, "WithdrawRank4", arrGroupData[iGroupID][g_iWithdrawRank][3]);
  202. SaveInteger(query, "groups", iGroupID+1, "WithdrawRank5", arrGroupData[iGroupID][g_iWithdrawRank][4]);
  203. SaveInteger(query, "groups", iGroupID+1, "Tokens", arrGroupData[iGroupID][g_iTurfTokens]);
  204. SaveInteger(query, "groups", iGroupID+1, "CrimeType", arrGroupData[iGroupID][g_iCrimeType]);
  205. SaveInteger(query, "groups", iGroupID+1, "GroupToyID", arrGroupData[iGroupID][g_iGroupToyID]);
  206. SaveInteger(query, "groups", iGroupID+1, "TurfTax", arrGroupData[iGroupID][g_iTurfTax]);
  207. for(i = 0; i != MAX_GROUP_RIVALS; ++i) {
  208. format(szMiscArray, sizeof(szMiscArray), "gRival%i", i);
  209. SaveString(query, "groups", iGroupID+1, szMiscArray, arrGroupData[iGroupID][g_iRivals][i]);
  210. }
  211. for(i = 0; i != MAX_GROUP_RANKS; ++i) {
  212. format(szMiscArray, sizeof(szMiscArray), "GClothes%i", i);
  213. SaveInteger(query, "groups", iGroupID+1, szMiscArray, arrGroupData[iGroupID][g_iClothes][i]);
  214. format(szMiscArray, sizeof(szMiscArray), "Rank%i", i);
  215. SaveString(query, "groups", iGroupID+1, szMiscArray, arrGroupRanks[iGroupID][i]);
  216. format(szMiscArray, sizeof(szMiscArray), "Rank%iPay", i);
  217. SaveInteger(query, "groups", iGroupID+1, szMiscArray, arrGroupData[iGroupID][g_iPaycheck][i]);
  218. }
  219. for(i = 0; i != MAX_GROUP_DIVS; ++i) {
  220. format(szMiscArray, sizeof(szMiscArray), "Div%i", i+1);
  221. SaveString(query, "groups", iGroupID+1, szMiscArray, arrGroupDivisions[iGroupID][i]);
  222. }
  223. for(i = 0; i != MAX_GROUP_WEAPONS; ++i) {
  224. format(szMiscArray, sizeof(szMiscArray), "Gun%i", i+1);
  225. SaveInteger(query, "groups", iGroupID+1, szMiscArray, arrGroupData[iGroupID][g_iLockerGuns][i]);
  226. format(szMiscArray, sizeof(szMiscArray), "Cost%i", i+1);
  227. SaveInteger(query, "groups", iGroupID+1, szMiscArray, arrGroupData[iGroupID][g_iLockerCost][i]);
  228. }
  229. SQLUpdateFinish(query, "groups", iGroupID+1);
  230. for (i = 0; i < MAX_GROUP_LOCKERS; i++) {
  231. format(query, 2048, "UPDATE `lockers` SET ");
  232. SaveFloat(query, "lockers", arrGroupLockers[iGroupID][i][g_iLockerSQLId], "LockerX", arrGroupLockers[iGroupID][i][g_fLockerPos][0]);
  233. SaveFloat(query, "lockers", arrGroupLockers[iGroupID][i][g_iLockerSQLId], "LockerY", arrGroupLockers[iGroupID][i][g_fLockerPos][1]);
  234. SaveFloat(query, "lockers", arrGroupLockers[iGroupID][i][g_iLockerSQLId], "LockerZ", arrGroupLockers[iGroupID][i][g_fLockerPos][2]);
  235. SaveInteger(query, "lockers", arrGroupLockers[iGroupID][i][g_iLockerSQLId], "LockerVW", arrGroupLockers[iGroupID][i][g_iLockerVW]);
  236. SaveInteger(query, "lockers", arrGroupLockers[iGroupID][i][g_iLockerSQLId], "LockerShare", arrGroupLockers[iGroupID][i][g_iLockerShare]);
  237. SQLUpdateFinish(query, "lockers", arrGroupLockers[iGroupID][i][g_iLockerSQLId]);
  238. }
  239. return 1;
  240. }
  241. stock SendGroupMessage(iGroupType, color, string[], allegiance = 0)
  242. {
  243. new iGroupID;
  244. foreach(new i: Player)
  245. {
  246. iGroupID = PlayerInfo[i][pMember];
  247. if( iGroupType == -1 || ((0 <= iGroupID < MAX_GROUPS) && arrGroupData[iGroupID][g_iGroupType] == iGroupType) )
  248. {
  249. if(allegiance == 0 || allegiance == arrGroupData[iGroupID][g_iAllegiance])
  250. {
  251. SendClientMessageEx(i, color, string);
  252. }
  253. }
  254. }
  255. }
  256. stock SendMedicMessage(color, string[])
  257. {
  258. foreach(new i: Player)
  259. {
  260. if(IsFirstAid(i) || IsAMedic(i))
  261. {
  262. SendClientMessageEx(i, color, string);
  263. }
  264. }
  265. }
  266. stock SendDivisionMessage(member, division, color, string[])
  267. {
  268. foreach(new i: Player)
  269. {
  270. if(PlayerInfo[i][pMember] == member && PlayerInfo[i][pDivision] == division) {
  271. SendClientMessageEx(i, color, string);
  272. }
  273. }
  274. }
  275. stock IsACop(playerid)
  276. {
  277. if((0 <= PlayerInfo[playerid][pMember] < MAX_GROUPS) && (arrGroupData[PlayerInfo[playerid][pMember]][g_iGroupType] == GROUP_TYPE_LEA)) return 1;
  278. return 0;
  279. }
  280. stock IsAMedic(playerid)
  281. {
  282. if((0 <= PlayerInfo[playerid][pMember] < MAX_GROUPS) && (arrGroupData[PlayerInfo[playerid][pMember]][g_iGroupType] == GROUP_TYPE_MEDIC)) return 1;
  283. return 0;
  284. }
  285. stock IsAReporter(playerid)
  286. {
  287. if((0 <= PlayerInfo[playerid][pMember] < MAX_GROUPS) && (arrGroupData[PlayerInfo[playerid][pMember]][g_iGroupType] == GROUP_TYPE_NEWS)) return 1;
  288. return 0;
  289. }
  290. stock IsAGovernment(playerid)
  291. {
  292. if((0 <= PlayerInfo[playerid][pMember] < MAX_GROUPS) && (arrGroupData[PlayerInfo[playerid][pMember]][g_iGroupType] == GROUP_TYPE_GOV)) return 1;
  293. return 0;
  294. }
  295. stock IsAJudge(playerid)
  296. {
  297. if((0 <= PlayerInfo[playerid][pMember] < MAX_GROUPS) && (arrGroupData[PlayerInfo[playerid][pMember]][g_iGroupType] == GROUP_TYPE_JUDICIAL)) return 1;
  298. return 0;
  299. }
  300. stock IsALawyer(playerid)
  301. {
  302. if((0 <= PlayerInfo[playerid][pMember] < MAX_GROUPS) && (arrGroupData[PlayerInfo[playerid][pMember]][g_iGroupType] == GROUP_TYPE_JUDICIAL) && PlayerInfo[playerid][pRank] > 1) return 1;
  303. if(PlayerInfo[playerid][pJob] == 2 || PlayerInfo[playerid][pJob2] == 2 || PlayerInfo[playerid][pJob3] == 2) return 1;
  304. return 0;
  305. }
  306. stock IsATaxiDriver(playerid)
  307. {
  308. if((0 <= PlayerInfo[playerid][pMember] < MAX_GROUPS) && (arrGroupData[PlayerInfo[playerid][pMember]][g_iGroupType] == GROUP_TYPE_TAXI) && TransportDuty[playerid] > 0) return 1;
  309. if(PlayerInfo[playerid][pJob] == 17 || PlayerInfo[playerid][pJob2] == 17 || PlayerInfo[playerid][pJob3] == 17 || PlayerInfo[playerid][pTaxiLicense] == 1 && TransportDuty[playerid] > 0) return 1;
  310. return 0;
  311. }
  312. stock IsAnFTSDriver(playerid)
  313. {
  314. if((0 <= PlayerInfo[playerid][pMember] < MAX_GROUPS) && (arrGroupData[PlayerInfo[playerid][pMember]][g_iGroupType] == GROUP_TYPE_TAXI)) return 1;
  315. return 0;
  316. }
  317. stock IsATowman(playerid)
  318. {
  319. if((0 <= PlayerInfo[playerid][pMember] < MAX_GROUPS) && (arrGroupData[PlayerInfo[playerid][pMember]][g_iGroupType] == GROUP_TYPE_TOWING)) return 1;
  320. return 0;
  321. }
  322. stock IsARacer(playerid)
  323. {
  324. if((0 <= PlayerInfo[playerid][pMember] < MAX_GROUPS) && (arrGroupData[PlayerInfo[playerid][pMember]][g_iCrimeType] == GROUP_CRIMINAL_TYPE_RACE)) return 1;
  325. return 0;
  326. }
  327. stock IsACriminal(playerid)
  328. {
  329. if((0 <= PlayerInfo[playerid][pMember] < MAX_GROUPS) && (arrGroupData[PlayerInfo[playerid][pMember]][g_iGroupType] == GROUP_TYPE_CRIMINAL)) return 1;
  330. return 0;
  331. }
  332. stock IsADocGuard(playerid)
  333. {
  334. if((0 <= PlayerInfo[playerid][pMember] < MAX_GROUPS) && (PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iDoCAccess])) return 1;
  335. return 0;
  336. }
  337. stock IsFirstAid(playerid)
  338. {
  339. if((0 <= PlayerInfo[playerid][pMember] < MAX_GROUPS) && arrGroupData[PlayerInfo[playerid][pMember]][g_iMedicAccess] != INVALID_DIVISION && PlayerInfo[playerid][pDivision] == arrGroupData[PlayerInfo[playerid][pMember]][g_iMedicAccess]) return 1;
  340. return 0;
  341. }
  342. stock IsMDCPermitted(playerid)
  343. {
  344. if(IsACop(playerid) || IsAJudge(playerid))
  345. {
  346. return 1;
  347. }
  348. return 0;
  349. }
  350. stock GetPlayerGroupInfo(targetid, rank[], division[], employer[])
  351. {
  352. new
  353. iGroupID = PlayerInfo[targetid][pMember],
  354. iRankID = PlayerInfo[targetid][pRank];
  355. if (0 <= iGroupID < MAX_GROUPS)
  356. {
  357. if(0 <= iRankID < MAX_GROUP_RANKS)
  358. {
  359. if(arrGroupRanks[iGroupID][iRankID][0]) {
  360. format(rank, (GROUP_MAX_RANK_LEN), "%s", arrGroupRanks[iGroupID][iRankID]);
  361. }
  362. else format(rank, (GROUP_MAX_RANK_LEN), "undefined");
  363. }
  364. if(0 <= PlayerInfo[targetid][pDivision] < MAX_GROUP_DIVS)
  365. {
  366. if(arrGroupDivisions[iGroupID][PlayerInfo[targetid][pDivision]][0]) { format(division, (GROUP_MAX_DIV_LEN), "%s", arrGroupDivisions[iGroupID][PlayerInfo[targetid][pDivision]]); }
  367. else format(division, (GROUP_MAX_DIV_LEN), "undefined");
  368. }
  369. else
  370. {
  371. if(arrGroupData[iGroupID][g_iGroupType] != GROUP_TYPE_CRIMINAL)
  372. format(division, (GROUP_MAX_DIV_LEN), "G.D.");
  373. else
  374. format(division, (GROUP_MAX_DIV_LEN), "None");
  375. }
  376. if(arrGroupData[iGroupID][g_szGroupName][0]) {
  377. format(employer, (GROUP_MAX_NAME_LEN), "%s", arrGroupData[iGroupID][g_szGroupName]);
  378. }
  379. else
  380. {
  381. format(employer, (GROUP_MAX_NAME_LEN), "undefined");
  382. }
  383. }
  384. else
  385. {
  386. format(rank, (GROUP_MAX_RANK_LEN), "N/A");
  387. format(division, (GROUP_MAX_DIV_LEN), "None");
  388. format(employer, (GROUP_MAX_NAME_LEN), "None");
  389. }
  390. return 1;
  391. }
  392. stock ToggleDVSiren(iDvSlotID, iSlot, iTogState = 0)
  393. {
  394. switch(DynVehicleObjInfo[iDvSlotID][iSlot][gv_iAttachedObjectModel])
  395. {
  396. case 1899:
  397. {
  398. if(!iTogState) return 0;
  399. DynVehicleObjInfo[iDvSlotID][iSlot][gv_iAttachedObjectModel] = 19294;
  400. Streamer_SetIntData(STREAMER_TYPE_OBJECT, DynVehicleObjInfo[iDvSlotID][iSlot][gv_iAttachedObjectID], E_STREAMER_MODEL_ID, 19294);
  401. AttachDynamicObjectToVehicle(DynVehicleObjInfo[iDvSlotID][iSlot][gv_iAttachedObjectID], DynVehicleInfo[iDvSlotID][gv_iSpawnedID], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectX], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectY], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectZ], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectRX], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectRY], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectRZ]);
  402. }
  403. case 18646:
  404. {
  405. if(iTogState) return 0;
  406. DynVehicleObjInfo[iDvSlotID][iSlot][gv_iAttachedObjectModel] = 19300;
  407. Streamer_SetIntData(STREAMER_TYPE_OBJECT, DynVehicleObjInfo[iDvSlotID][iSlot][gv_iAttachedObjectID], E_STREAMER_MODEL_ID, 19300);
  408. AttachDynamicObjectToVehicle(DynVehicleObjInfo[iDvSlotID][iSlot][gv_iAttachedObjectID], DynVehicleInfo[iDvSlotID][gv_iSpawnedID], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectX], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectY], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectZ], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectRX], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectRY], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectRZ]);
  409. }
  410. case 19294:
  411. {
  412. if(iTogState) return 0;
  413. DynVehicleObjInfo[iDvSlotID][iSlot][gv_iAttachedObjectModel] = 1899;
  414. Streamer_SetIntData(STREAMER_TYPE_OBJECT, DynVehicleObjInfo[iDvSlotID][iSlot][gv_iAttachedObjectID], E_STREAMER_MODEL_ID, 1899);
  415. AttachDynamicObjectToVehicle(DynVehicleObjInfo[iDvSlotID][iSlot][gv_iAttachedObjectID], DynVehicleInfo[iDvSlotID][gv_iSpawnedID], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectX], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectY], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectZ], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectRX], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectRY], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectRZ]);
  416. }
  417. case 19300:
  418. {
  419. if(!iTogState) return 0;
  420. DynVehicleObjInfo[iDvSlotID][iSlot][gv_iAttachedObjectModel] = 18646;
  421. Streamer_SetIntData(STREAMER_TYPE_OBJECT, DynVehicleObjInfo[iDvSlotID][iSlot][gv_iAttachedObjectID], E_STREAMER_MODEL_ID, 18646);
  422. AttachDynamicObjectToVehicle(DynVehicleObjInfo[iDvSlotID][iSlot][gv_iAttachedObjectID], DynVehicleInfo[iDvSlotID][gv_iSpawnedID], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectX], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectY], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectZ], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectRX], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectRY], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectRZ]);
  423. }
  424. case 19419:
  425. {
  426. if(iTogState) return 0;
  427. DynVehicleObjInfo[iDvSlotID][iSlot][gv_iAttachedObjectModel] = 19420;
  428. Streamer_SetIntData(STREAMER_TYPE_OBJECT, DynVehicleObjInfo[iDvSlotID][iSlot][gv_iAttachedObjectID], E_STREAMER_MODEL_ID, 19420);
  429. AttachDynamicObjectToVehicle(DynVehicleObjInfo[iDvSlotID][iSlot][gv_iAttachedObjectID], DynVehicleInfo[iDvSlotID][gv_iSpawnedID], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectX], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectY], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectZ], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectRX], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectRY], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectRZ]);
  430. }
  431. case 19420:
  432. {
  433. if(!iTogState) return 0;
  434. DynVehicleObjInfo[iDvSlotID][iSlot][gv_iAttachedObjectModel] = 19419;
  435. Streamer_SetIntData(STREAMER_TYPE_OBJECT, DynVehicleObjInfo[iDvSlotID][iSlot][gv_iAttachedObjectID], E_STREAMER_MODEL_ID, 19419);
  436. AttachDynamicObjectToVehicle(DynVehicleObjInfo[iDvSlotID][iSlot][gv_iAttachedObjectID], DynVehicleInfo[iDvSlotID][gv_iSpawnedID], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectX], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectY], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectZ], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectRX], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectRY], DynVehicleObjInfo[iDvSlotID][iSlot][gv_fObjectRZ]);
  437. }
  438. }
  439. return 1;
  440. }
  441. stock ToggleSiren(vehid, iTogState)
  442. {
  443. if(iTogState == 1)
  444. {
  445. if(GetGVarInt("VehSiren", vehid) != INVALID_OBJECT_ID)
  446. {
  447. DestroyDynamicObject(GetGVarInt("VehSiren", vehid));
  448. DeleteGVar("VehSiren", vehid);
  449. }
  450. if(GetGVarInt("VehSiren2", vehid) != INVALID_OBJECT_ID)
  451. {
  452. DestroyDynamicObject(GetGVarInt("VehSiren2", vehid));
  453. DeleteGVar("VehSiren2", vehid);
  454. }
  455. }
  456. else
  457. {
  458. switch(GetVehicleModel(vehid))
  459. {
  460. case 402:
  461. {
  462. new iTempObj = CreateDynamicObject(18646, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1, -1, -1, 200.0);
  463. AttachDynamicObjectToVehicle(iTempObj, vehid, -0.20, 0.5, 0.4, 0.0, 0.0, 0.0);
  464. SetGVarInt("VehSiren", iTempObj, vehid);
  465. }
  466. case 411, 541:
  467. {
  468. new iTempObj = CreateDynamicObject(18646, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1, -1, -1, 200.0);
  469. AttachDynamicObjectToVehicle(iTempObj, vehid, 0.0, 0.2, 0.4, 0.0, 0.0, 0.0);
  470. SetGVarInt("VehSiren", iTempObj, vehid);
  471. }
  472. case 415:
  473. {
  474. new iTempObj = CreateDynamicObject(18646, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1, -1, -1, 200.0);
  475. AttachDynamicObjectToVehicle(iTempObj, vehid, -0.20, 0.30, 0.3, 0.0, 0.0, 0.0);
  476. SetGVarInt("VehSiren", iTempObj, vehid);
  477. }
  478. case 451:
  479. {
  480. new iTempObj = CreateDynamicObject(18646, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1, -1, -1, 200.0);
  481. AttachDynamicObjectToVehicle(iTempObj, vehid, -0.30, 0.4, 0.6, 0.0, 0.0, 0.0);
  482. SetGVarInt("VehSiren", iTempObj, vehid);
  483. }
  484. case 525:
  485. {
  486. new iTempObj2 = CreateDynamicObject(19294, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1, -1, -1, 200.0);
  487. new iTempObj3 = CreateDynamicObject(19294, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1, -1, -1, 200.0);
  488. AttachDynamicObjectToVehicle(iTempObj2, vehid, 0.55, -0.5, 1.5, 0.0, 0.0, 0.0);
  489. AttachDynamicObjectToVehicle(iTempObj3, vehid, -0.55, -0.5, 1.5, 0.0, 0.0, 0.0);
  490. SetGVarInt("VehSiren", iTempObj2, vehid);
  491. SetGVarInt("VehSiren2", iTempObj3, vehid);
  492. }
  493. default:
  494. {
  495. new iTempObj = CreateDynamicObject(18646, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1, -1, -1, 200.0);
  496. AttachDynamicObjectToVehicle(iTempObj, vehid, -0.30, 0.4, 0.4, 0.0, 0.0, 0.0);
  497. SetGVarInt("VehSiren", iTempObj, vehid);
  498. }
  499. }
  500. }
  501. return 1;
  502. }
  503. Group_GetMaxRank(iGroupID) {
  504. new
  505. iCount = MAX_GROUP_RANKS;
  506. while(iCount--) if(arrGroupRanks[iGroupID][iCount][0]) return iCount;
  507. return MAX_GROUP_RANKS-1;
  508. }
  509. Group_GetMaxDiv(iGroupID) {
  510. new
  511. iCount = MAX_GROUP_DIVS;
  512. while(iCount--) if(arrGroupDivisions[iGroupID][iCount][0]) return iCount;
  513. return MAX_GROUP_DIVS;
  514. }
  515. Group_ListGroups(iPlayerID, iDialogID = DIALOG_LISTGROUPS) {
  516. new
  517. szDialogStr[MAX_GROUPS * (GROUP_MAX_NAME_LEN + 16)],
  518. iCount;
  519. while(iCount < MAX_GROUPS) {
  520. if(arrGroupData[iCount][g_szGroupName][0])
  521. format(szDialogStr, sizeof szDialogStr, "%s\n(%i) {%s}%s{FFFFFF}", szDialogStr, iCount+1, Group_NumToDialogHex(arrGroupData[iCount][g_hDutyColour]), arrGroupData[iCount][g_szGroupName]);
  522. else
  523. format(szDialogStr, sizeof szDialogStr, "%s\n(%i) (empty)", szDialogStr, iCount+1);
  524. ++iCount;
  525. }
  526. if(iDialogID == DIALOG_MAKELEADER)
  527. {
  528. new diagTitle[64];
  529. format(diagTitle, sizeof(diagTitle), "Group List - Set Leadership for %s", GetPlayerNameEx(GetPVarInt(iPlayerID, "MakingLeader")));
  530. return ShowPlayerDialogEx(iPlayerID, iDialogID, DIALOG_STYLE_LIST, diagTitle, szDialogStr, "Select", "Cancel");
  531. }
  532. else return ShowPlayerDialogEx(iPlayerID, iDialogID, DIALOG_STYLE_LIST, "Group List", szDialogStr, "Select", "Cancel");
  533. }
  534. Group_ReturnAllegiance(iAllegianceID) {
  535. new
  536. szResult[16] = "None";
  537. switch(iAllegianceID) {
  538. case 1: szResult = "San Andreas";
  539. case 2: szResult = "New Robada";
  540. }
  541. return szResult;
  542. }
  543. Group_ReturnType(iGroupType) {
  544. new
  545. szResult[32] = "None";
  546. switch(iGroupType) {
  547. case 1: szResult = "Law Enforcement";
  548. case 2: szResult = "Contract Agency";
  549. case 3: szResult = "Fire/Medic";
  550. case 4: szResult = "News Agency";
  551. case 5: szResult = "Government";
  552. case 6: szResult = "Judicial";
  553. case 7: szResult = "Transport";
  554. case 8: szResult = "Towing";
  555. case 9: szResult = "Criminal";
  556. }
  557. return szResult;
  558. }
  559. Group_DisplayDialog(iPlayerID, iGroupID) {
  560. new
  561. szTitle[22 + GROUP_MAX_NAME_LEN],
  562. szDialog[2048];
  563. format(szDialog, sizeof(szDialog),
  564. "{BBBBBB}Name:{FFFFFF} %s\n\
  565. {BBBBBB}Type:{FFFFFF} %s\n\
  566. {BBBBBB}Allegiance:{FFFFFF} %s\n\
  567. {BBBBBB}Jurisdiction\n\
  568. {BBBBBB}Duty colour: {%s}(edit)\n\
  569. {BBBBBB}Radio colour: {%s}(edit)\n\
  570. {BBBBBB}Radio access:{FFFFFF} %s (rank %i)\n\
  571. {BBBBBB}Department radio access:{FFFFFF} %s (rank %i)\n",
  572. arrGroupData[iGroupID][g_szGroupName],
  573. Group_ReturnType(arrGroupData[iGroupID][g_iGroupType]),
  574. Group_ReturnAllegiance(arrGroupData[iGroupID][g_iAllegiance]),
  575. Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]),
  576. Group_NumToDialogHex(arrGroupData[iGroupID][g_hRadioColour]),
  577. (arrGroupData[iGroupID][g_iRadioAccess] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iRadioAccess],
  578. (arrGroupData[iGroupID][g_iDeptRadioAccess] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iDeptRadioAccess]
  579. );
  580. format(szDialog, sizeof(szDialog), "%s\
  581. {BBBBBB}Int radio access:{FFFFFF} %s (rank %i)\n\
  582. {BBBBBB}Bug access:{FFFFFF} %s (rank %i)\n\
  583. {BBBBBB}Find access:{FFFFFF} %s (rank %i)\n\
  584. {BBBBBB}Government announcement:{FFFFFF} %s (rank %i)\n\
  585. {BBBBBB}Treasury Access:{FFFFFF} %s (rank %i)\n\
  586. {BBBBBB}Free name change:{FFFFFF} %s (rank %i)\n\
  587. {BBBBBB}Free name change div:{FFFFFF} %s (division %i)\n\
  588. {BBBBBB}Spike Strips:{FFFFFF} %s (rank %i)\n\
  589. {BBBBBB}Barricades:{FFFFFF} %s (rank %i)\n",
  590. szDialog,
  591. (arrGroupData[iGroupID][g_iIntRadioAccess] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iIntRadioAccess],
  592. (arrGroupData[iGroupID][g_iBugAccess] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iBugAccess],
  593. (arrGroupData[iGroupID][g_iFindAccess] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iFindAccess],
  594. (arrGroupData[iGroupID][g_iGovAccess] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iGovAccess],
  595. (arrGroupData[iGroupID][g_iTreasuryAccess] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iTreasuryAccess],
  596. (arrGroupData[iGroupID][g_iFreeNameChange] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iFreeNameChange],
  597. (arrGroupData[iGroupID][g_iFreeNameChangeDiv] != INVALID_DIVISION) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iFreeNameChangeDiv],
  598. (arrGroupData[iGroupID][g_iSpikeStrips] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iSpikeStrips],
  599. (arrGroupData[iGroupID][g_iBarricades] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iBarricades]
  600. );
  601. format(szDialog, sizeof(szDialog), "%s\
  602. {BBBBBB}Cones:{FFFFFF} %s (rank %i)\n\
  603. {BBBBBB}Flares:{FFFFFF} %s (rank %i)\n\
  604. {BBBBBB}Barrels:{FFFFFF} %s (rank %i)\n\
  605. {BBBBBB}Ladders:{FFFFFF} %s (rank %i)\n\
  606. {BBBBBB}Tapes:{FFFFFF} %s (rank %i)\n\
  607. {BBBBBB}Crate Island Control:{FFFFFF} %s (rank %i)\n\
  608. {BBBBBB}Edit Locker Stock:{FFFFFF} (%i)\n\
  609. {BBBBBB}Edit Locker Weapons (%i defined)\n",
  610. szDialog,
  611. (arrGroupData[iGroupID][g_iCones] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iCones],
  612. (arrGroupData[iGroupID][g_iFlares] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iFlares],
  613. (arrGroupData[iGroupID][g_iBarrels] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iBarrels],
  614. (arrGroupData[iGroupID][g_iLadders] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iLadders],
  615. (arrGroupData[iGroupID][g_iTapes] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iTapes],
  616. (arrGroupData[iGroupID][g_iCrateIsland] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iCrateIsland],
  617. arrGroupData[iGroupID][g_iLockerStock],
  618. Array_Count(arrGroupData[iGroupID][g_iLockerGuns], MAX_GROUP_WEAPONS)
  619. );
  620. format(szDialog, sizeof(szDialog),
  621. "%s\
  622. {BBBBBB}Edit Payments\n\
  623. {BBBBBB}Edit Divisions (%i defined)\n\
  624. {BBBBBB}Edit Ranks (%i defined)\n\
  625. {BBBBBB}Edit Lockers\n\
  626. {BBBBBB}Edit Crate Delivery Position (current distance: %.0f)\n\
  627. {BBBBBB}Locker Cost Type: %s\n\
  628. {BBBBBB}Edit the Garage Position (current distance: %.0f)\n\
  629. {BBBBBB}Edit Tackle Access:{FFFFFF} %s (rank %i)\n\
  630. {BBBBBB}Edit Wheel Clamps Access:{FFFFFF} %s (rank %i)\n\
  631. {BBBBBB}Edit DoC Access:{FFFFFF} %s (rank %i)\n",
  632. szDialog,
  633. String_Count(arrGroupDivisions[iGroupID], MAX_GROUP_DIVS),
  634. String_Count(arrGroupRanks[iGroupID], MAX_GROUP_RANKS),
  635. GetPlayerDistanceFromPoint(iPlayerID, arrGroupData[iGroupID][g_fCratePos][0], arrGroupData[iGroupID][g_fCratePos][1], arrGroupData[iGroupID][g_fCratePos][2]),
  636. lockercosttype[arrGroupData[iGroupID][g_iLockerCostType]],
  637. GetPlayerDistanceFromPoint(iPlayerID, arrGroupData[iGroupID][g_fGaragePos][0], arrGroupData[iGroupID][g_fGaragePos][1], arrGroupData[iGroupID][g_fGaragePos][2]),
  638. (arrGroupData[iGroupID][g_iTackleAccess] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iTackleAccess],
  639. (arrGroupData[iGroupID][g_iWheelClamps] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iWheelClamps],
  640. (arrGroupData[iGroupID][g_iDoCAccess] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iDoCAccess]
  641. );
  642. format(szDialog, sizeof(szDialog),
  643. "%s\
  644. {BBBBBB}Edit Medic Access:{FFFFFF} %s (Div %i)\n\
  645. {BBBBBB}Edit DMV Release:{FFFFFF} %s (rank %i)\n\
  646. {BBBBBB}Edit Temporary Number:{FFFFFF} %s (rank %i)\n\
  647. {BBBBBB}Edit LEO Arrest Access:{FFFFFF} %s (rank %i)\n\
  648. {BBBBBB}Edit OOC Chat Access:{FFFFFF} %s (rank %i)\n\
  649. {BBBBBB}Edit OOC Chat Color: {%s}(edit)\n\
  650. {BBBBBB}Edit Group Clothes\n\
  651. {BBBBBB}Edit Turf Cap Rank{FFFFFF} %s (rank %i)\n\
  652. {BBBBBB}Edit Point Cap Rank {FFFFFF} %s (rank %i)\n\
  653. {BBBBBB}Edit Crime Group Type {FFFFFF} %s",
  654. szDialog,
  655. (arrGroupData[iGroupID][g_iMedicAccess] != INVALID_DIVISION) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iMedicAccess],
  656. (arrGroupData[iGroupID][g_iDMVAccess] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iDMVAccess],
  657. (arrGroupData[iGroupID][gTempNum] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][gTempNum],
  658. (arrGroupData[iGroupID][gLEOArrest] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][gLEOArrest],
  659. (arrGroupData[iGroupID][g_iOOCChat] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iOOCChat],
  660. Group_NumToDialogHex(arrGroupData[iGroupID][g_hOOCColor]),
  661. (arrGroupData[iGroupID][g_iTurfCapRank] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iTurfCapRank],
  662. (arrGroupData[iGroupID][g_iPointCapRank] != INVALID_RANK) ? ("Yes") : ("No"), arrGroupData[iGroupID][g_iPointCapRank],
  663. ReturnCrimeGroupType(arrGroupData[iGroupID][g_iCrimeType])
  664. );
  665. if(PlayerInfo[iPlayerID][pAdmin] >= 1337) strcat(szDialog, "\nDisband Group");
  666. format(szTitle, sizeof szTitle, "{FFFFFF}Edit {%s}%s", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  667. return ShowPlayerDialogEx(iPlayerID, DIALOG_EDITGROUP, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  668. }
  669. stock CrateLog(groupid, string[])
  670. {
  671. new month, day, year, file[32];
  672. getdate(year, month, day);
  673. format(file, sizeof(file), "cratelogs/%d/%d-%02d-%02d.log", groupid, year, month, day);
  674. return Log(file, string);
  675. }
  676. stock GroupLog(groupid, string[])
  677. {
  678. new month, day, year, file[32];
  679. getdate(year, month, day);
  680. format(file, sizeof(file), "grouplogs/%d/%d-%02d-%02d.log", groupid, year, month, day);
  681. return Log(file, string);
  682. }
  683. stock GroupPayLog(groupid, string[])
  684. {
  685. new month, day, year, file[32];
  686. getdate(year, month, day);
  687. format(file, sizeof(file), "grouppay/%d/%d-%02d-%02d.log", groupid, year, month, day);
  688. return Log(file, string);
  689. }
  690. stock GroupLogEx(groupid, string[], type = 0) {
  691. new month, day, year, file[32];
  692. getdate(year, month, day);
  693. switch(type) {
  694. case 0: format(file, sizeof(file), "grouplogs/%d/warrents/%d-%02d-%02d.log", groupid, year, month, day);
  695. default: format(file, sizeof(file), "grouplogs/%d/assests/%d-%02d-%02d.log", groupid, year, month, day);
  696. }
  697. return Log(file, string);
  698. }
  699. ReturnCrimeGroupType(iType)
  700. {
  701. new szReturn[10];
  702. switch(iType)
  703. {
  704. case 0: szReturn = "None";
  705. case 1: szReturn = "Racer";
  706. }
  707. return szReturn;
  708. }
  709. hook OnPlayerStateChange(playerid, newstate, oldstate)
  710. {
  711. if(oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER)
  712. {
  713. GetPlayerName(playerid, VehInfo[GetPlayerVehicleID(playerid)][vLastDriver], MAX_PLAYER_NAME);
  714. }
  715. }
  716. hook OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
  717. if((newkeys & KEY_YES) && IsPlayerInAnyDynamicArea(playerid)) {
  718. if(0 <= PlayerInfo[playerid][pMember] < MAX_GROUPS) {
  719. new areaid[1];
  720. GetPlayerDynamicAreas(playerid, areaid);
  721. // new i = Streamer_GetIntData(STREAMER_TYPE_AREA, areaid[0], E_STREAMER_EXTRA_ID);
  722. if(areaid[0] != INVALID_STREAMER_ID) {
  723. for(new i; i < MAX_GROUP_LOCKERS; ++i) {
  724. if(areaid[0] == arrGroupLockers[PlayerInfo[playerid][pMember]][i][g_iLockerAreaID]) cmd_locker(playerid, "");
  725. }
  726. }
  727. }
  728. }
  729. }
  730. hook OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
  731. if(arrAntiCheat[playerid][ac_iFlags][AC_DIALOGSPOOFING] > 0) return 1;
  732. new sendername[MAX_PLAYER_NAME];
  733. new string[128], Float:parmor;
  734. szMiscArray[0] = 0;
  735. switch(dialogid)
  736. {
  737. // BEGIN DYNAMIC GROUP CODE
  738. case G_LOCKER_MAIN: {
  739. if(!response) return 1;
  740. new iGroupID = PlayerInfo[playerid][pMember];
  741. if (strcmp("Clothes", inputtext) == 0) {
  742. if(IsACriminal(playerid) || IsARacer(playerid)) {
  743. format(szMiscArray, sizeof(szMiscArray), "%s reaches into the locker grabbing their clothes", GetPlayerNameEx(playerid));
  744. ShowModelSelectionMenuEx(playerid, arrGroupData[PlayerInfo[playerid][pMember]][g_iClothes], MAX_GROUP_RANKS, "Change your clothes.", DYNAMIC_FAMILY_CLOTHES, 0.0, 0.0, -55.0);
  745. return 1;
  746. }
  747. }
  748. if (strcmp("Duty", inputtext) == 0) {
  749. if(PlayerInfo[playerid][pDuty]==0) {
  750. if (IsAReporter(playerid) || IsATaxiDriver(playerid))
  751. format(string, sizeof(string), "* %s %s takes a badge from their locker.", arrGroupRanks[iGroupID][PlayerInfo[playerid][pRank]], GetPlayerNameEx(playerid));
  752. else
  753. format(string, sizeof(string), "* %s %s takes a badge and a gun from their locker.", arrGroupRanks[iGroupID][PlayerInfo[playerid][pRank]], GetPlayerNameEx(playerid));
  754. ProxChatBubble(playerid, string);
  755. // ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
  756. SetHealth(playerid, 100.0);
  757. if(IsAMedic(playerid)) Medics += 1;
  758. if(arrGroupData[iGroupID][g_iLockerStock] > 1 && arrGroupData[iGroupID][g_iLockerCostType] == 0) {
  759. SetArmour(playerid, 150);
  760. arrGroupData[iGroupID][g_iLockerStock] -= 1;
  761. new str[128];
  762. format(str, sizeof(str), "%s took a vest out of the %s locker at a cost of 1 HG Material.", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_szGroupName]);
  763. GroupPayLog(iGroupID, str);
  764. }
  765. else if(arrGroupData[iGroupID][g_iLockerCostType] != 0) SetArmour(playerid, 150.0);
  766. else {
  767. SendClientMessageEx(playerid, COLOR_RED, "The locker doesn't have the stock for your armor vest.");
  768. SendClientMessageEx(playerid, COLOR_GRAD2, "Contact your supervisor or the STAG and organize a crate delivery.");
  769. }
  770. PlayerInfo[playerid][pDuty] = 1;
  771. SetPlayerToTeamColor(playerid);
  772. SendClientMessageEx(playerid, COLOR_GRAD2, "You may now select your weapons from the equipment locker");
  773. }
  774. else if(PlayerInfo[playerid][pDuty]==1) {
  775. format(string, sizeof(string), "* %s %s places their badge and gun in their locker.", arrGroupRanks[iGroupID][PlayerInfo[playerid][pRank]], GetPlayerNameEx(playerid));
  776. ProxChatBubble(playerid, string);
  777. if(IsAMedic(playerid)) Medics -= 1;
  778. SetHealth(playerid, 100.0);
  779. RemoveArmor(playerid);
  780. PlayerInfo[playerid][pDuty] = 0;
  781. SetPlayerToTeamColor(playerid);
  782. }
  783. }
  784. if (strcmp("Equipment", inputtext) == 0) {
  785. if((PlayerInfo[playerid][pAdmin] >= 1337 || PlayerInfo[playerid][pUndercover] >= 1) && PlayerInfo[playerid][pTogReports] == 0)
  786. return SendClientMessageEx(playerid, COLOR_GRAD2, "Locker weapons have been restricted from admins, /togreports to gain access.");
  787. if(PlayerInfo[playerid][pTogReports] == 1 || PlayerInfo[playerid][pAdmin] < 2) {
  788. new
  789. szDialog[(32 + 8) * (MAX_GROUP_WEAPONS+1)];
  790. for(new i = 0; i != MAX_GROUP_WEAPONS; ++i) {
  791. if(arrGroupData[iGroupID][g_iLockerGuns][i]) {
  792. format(szDialog, sizeof szDialog, "%s\n(%i) %s", szDialog, arrGroupData[iGroupID][g_iLockerGuns][i], Weapon_ReturnName(arrGroupData[iGroupID][g_iLockerGuns][i]));
  793. if (arrGroupData[iGroupID][g_iLockerCostType] == 2) format(szDialog, sizeof szDialog, "%s $%d", szDialog, arrGroupData[iGroupID][g_iLockerCost][i]);
  794. }
  795. else strcat(szDialog, "\n(empty)");
  796. }
  797. strcat(szDialog, "\nAccessories");
  798. format(string, sizeof(string), "%s Weapon Locker", arrGroupData[iGroupID][g_szGroupName]);
  799. ShowPlayerDialogEx(playerid, G_LOCKER_EQUIPMENT, DIALOG_STYLE_LIST, string, szDialog, "Purchase", "Cancel");
  800. }
  801. }
  802. if (strcmp("Weapons", inputtext) == 0) {
  803. //if(IsACriminal(playerid) || IsARacer(playerid)) return ShowGroupWeapons(playerid, iGroupID);
  804. return ShowGroupWeapons(playerid, iGroupID);
  805. }
  806. if (strcmp("Crate Transfer", inputtext) == 0) {
  807. //if(IsACriminal(playerid) || IsARacer(playerid)) return ShowGroupWeapons(playerid, iGroupID);
  808. return CrateTransferOption(playerid, iGroupID);
  809. }
  810. if (strcmp("Drugs", inputtext) == 0) {
  811. szMiscArray[0] = 0;
  812. szMiscArray = "Drugs\tAmount\n";
  813. for(new i; i < sizeof(Drugs); ++i) {
  814. format(szMiscArray, sizeof(szMiscArray), "%s%s\t%s\n", szMiscArray, Drugs[i], number_format(arrGroupData[iGroupID][g_iDrugs][i]));
  815. }
  816. format(string, sizeof(string), "%s Drug Locker", arrGroupData[iGroupID][g_szGroupName]);
  817. SetPVarInt(playerid, "GSafe_Opt", 2);
  818. return ShowPlayerDialogEx(playerid, G_LOCKER_DRUGS, DIALOG_STYLE_TABLIST_HEADERS, string, szMiscArray, "Select", "<<");
  819. //\nCannabis (%i)\nCrack (%i)\nHeroin (%i)\nSyringes (%i)\nOpium (%i)
  820. //return ShowPlayerDialogEx(playerid, DIALOG_GROUP_SACTIONTYPE, DIALOG_STYLE_LIST, "Gang Safe: Cannabis Safe", "Deposit\nWithdraw", "Select", "Back");
  821. }
  822. if (strcmp("Uniform", inputtext) == 0) {
  823. ShowPlayerDialogEx(playerid, G_LOCKER_UNIFORM, DIALOG_STYLE_INPUT, "Uniform","Choose a skin (by ID).", "Select", "Cancel");
  824. }
  825. /*if (strcmp("Ingredients", inputtext) == 0) {
  826. if(IsACriminal(playerid) || IsARacer(playerid)) {
  827. szMiscArray[0] = 0;
  828. szMiscArray = "Ingredients\tAmount\n";
  829. for(new i; i < sizeof(szIngredients); ++i) {
  830. format(szMiscArray, sizeof(szMiscArray), "%s%s\t%s\n", szMiscArray, szIngredients[i], number_format(arrGroupData[iGroupID][g_iIngredients][i]));
  831. }
  832. format(string, sizeof(string), "%s Ingredient Locker", arrGroupData[iGroupID][g_szGroupName]);
  833. SetPVarInt(playerid, "GSafe_Opt", 3);
  834. return ShowPlayerDialogEx(playerid, G_LOCKER_INGREDIENTS, DIALOG_STYLE_TABLIST_HEADERS, string, szMiscArray, "Select", "<<");
  835. }
  836. }*/
  837. if (strcmp("Portable Medkit & Vest Kit", inputtext) == 0) {
  838. if(GetPVarInt(playerid, "MedVestKit") == 1) {
  839. return SendClientMessageEx(playerid, COLOR_GRAD1, "You're already carrying a med kit.");
  840. }
  841. if(arrGroupData[iGroupID][g_iLockerStock] > 1 && arrGroupData[iGroupID][g_iLockerCostType] == 0) {
  842. SendClientMessageEx(playerid, COLOR_GRAD1, "You are now carrying a med kit. /placekit to store it in your backpack/vehicle.");
  843. SetPVarInt(playerid, "MedVestKit", 1);
  844. arrGroupData[iGroupID][g_iLockerStock] -= 1;
  845. new str[128];
  846. format(str, sizeof(str), "%s took a med kit & vest out of the %s locker at a cost of 1 HG Material.", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_szGroupName]);
  847. GroupPayLog(iGroupID, str);
  848. }
  849. else if(arrGroupData[iGroupID][g_iLockerCostType] == 1) {
  850. if(arrGroupData[iGroupID][g_iBudget] > 3000) {
  851. SendClientMessageEx(playerid, COLOR_GRAD1, "You are now carrying a med kit. /placekit to store it in your backpack/vehicle.");
  852. SetPVarInt(playerid, "MedVestKit", 1);
  853. arrGroupData[iGroupID][g_iBudget] -= 3000;
  854. new str[128];
  855. format(str, sizeof(str), "%s took a med kit & vest out of the %s locker at a cost of $3,000 to the budget fund.", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_szGroupName]);
  856. GroupPayLog(iGroupID, str);
  857. }
  858. else return SendClientMessageEx(playerid, COLOR_GRAD2, " Your agency cannot afford the vest. ($3,000)");
  859. }
  860. else if(arrGroupData[iGroupID][g_iLockerCostType] == 2) {
  861. if(GetPlayerCash(playerid) > 3000) {
  862. SendClientMessageEx(playerid, COLOR_GRAD1, "You are now carrying a med kit. /placekit to store it in your backpack/vehicle.");
  863. SetPVarInt(playerid, "MedVestKit", 1);
  864. GivePlayerCash(playerid, -3000);
  865. new str[128];
  866. format(str, sizeof(str), "%s took a med kit & vest out of the %s locker at a personal cost of $3,000.", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_szGroupName]);
  867. GroupPayLog(iGroupID, str);
  868. }
  869. else return SendClientMessageEx(playerid, COLOR_GRAD2, " You cannot afford the vest. ($3,000)");
  870. }
  871. else {
  872. SendClientMessageEx(playerid, COLOR_RED, "The locker doesn't have the stock for your trunk kit.");
  873. SendClientMessageEx(playerid, COLOR_GRAD2, "Contact your supervisor and organize a crate delivery.");
  874. }
  875. }
  876. if (strcmp("Clear Suspect", inputtext) == 0) {
  877. ShowPlayerDialogEx(playerid, G_LOCKER_CLEARSUSPECT,DIALOG_STYLE_INPUT, arrGroupData[iGroupID][g_szGroupName]," Who would you like to clear?","Clear","Return");
  878. }
  879. if (strcmp("First Aid & Kevlar", inputtext) == 0) {
  880. if(arrGroupData[iGroupID][g_iLockerStock] > 1 && arrGroupData[iGroupID][g_iLockerCostType] == 0) {
  881. GetArmour(playerid, parmor);
  882. if(parmor < 150) SetArmour(playerid, 150);
  883. SetHealth(playerid, 100.0);
  884. arrGroupData[iGroupID][g_iLockerStock] -= 1;
  885. new str[128];
  886. format(str, sizeof(str), "%s took a vest out of the %s locker at a cost of 1 HG Material.", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_szGroupName]);
  887. GroupPayLog(iGroupID, str);
  888. }
  889. else if(arrGroupData[iGroupID][g_iLockerCostType] == 1) {
  890. if(arrGroupData[iGroupID][g_iBudget] > 2500) {
  891. GetArmour(playerid, parmor);
  892. if(parmor < 150) SetArmour(playerid, 150);
  893. SetHealth(playerid, 100.0);
  894. arrGroupData[iGroupID][g_iBudget] -= 2500;
  895. new str[128];
  896. format(str, sizeof(str), "%s took a vest out of the %s locker at a cost of $2,500.", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_szGroupName]);
  897. GroupPayLog(iGroupID, str);
  898. }
  899. else return SendClientMessageEx(playerid, COLOR_GRAD2, " Your agency cannot afford the vest. ($2,500)");
  900. }
  901. else if(arrGroupData[iGroupID][g_iLockerCostType] == 2) {
  902. if(GetPlayerCash(playerid) > 2500) {
  903. GetArmour(playerid, parmor);
  904. if(parmor < 150) SetArmour(playerid, 150);
  905. SetHealth(playerid, 100.0);
  906. GivePlayerCash(playerid, -2500);
  907. new str[128];
  908. format(str, sizeof(str), "%s took a vest out of the %s locker at a personal cost of $2,500.", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_szGroupName]);
  909. GroupPayLog(iGroupID, str);
  910. }
  911. else return SendClientMessageEx(playerid, COLOR_GRAD2, " You cannot afford the vest. ($2,500)");
  912. }
  913. else {
  914. SendClientMessageEx(playerid, COLOR_RED, "The locker doesn't have the stock for your armor vest.");
  915. SendClientMessageEx(playerid, COLOR_GRAD2, "Contact your supervisor or the SAAS and organize a crate delivery.");
  916. return 1;
  917. }
  918. }
  919. /* if(strcmp("High Grade Armour", inputtext) == 0) {
  920. if(arrGroupData[iGroupID][g_iLockerStock] > 5) {
  921. GetArmour(playerid, parmor);
  922. if(parmor > 149) return SendClientMessageEx(playerid, COLOR_RED, "You already have high grade armour equipped!");
  923. arrGroupData[iGroupID][g_iLockerStock] -= 5;
  924. SetArmour(playerid, 150);
  925. new str[128];
  926. format(str, sizeof(str), "%s took a high grade vest out of the %s locker at a cost of 5 HG Material.", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_szGroupName]);
  927. GroupPayLog(iGroupID, str);
  928. SendClientMessageEx(playerid, COLOR_LIGHTBLUE, "* Your armor has been boosted to 150 as it's high grade.");
  929. } else {
  930. SendClientMessageEx(playerid, COLOR_RED, "The locker doesn't have the stock for your armor vest.");
  931. SendClientMessageEx(playerid, COLOR_GRAD2, "Contact your supervisor or the SAAS and organize a crate delivery.");
  932. }
  933. }
  934. */
  935. if (strcmp("Materials", inputtext, true, 9) == 0) { // we need to specify the cellmax as else it'll pick up the formatting
  936. SetPVarInt(playerid, "GSafe_Opt", 1);
  937. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_SACTIONTYPE, DIALOG_STYLE_LIST, "Gang Safe: Material Safe", "Deposit\nWithdraw", "Select", "Back");
  938. }
  939. if (strcmp("Vault", inputtext, true, 5) == 0) { // we need to specify the cellmax as else it'll pick up the formatting
  940. SetPVarInt(playerid, "GSafe_Opt", 0);
  941. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_SACTIONTYPE, DIALOG_STYLE_LIST, "Gang Safe: Money Vault", "Deposit\nWithdraw", "Select", "Back");
  942. }
  943. if (strcmp("Tazer & Cuffs", inputtext) == 0) {
  944. if(PlayerInfo[playerid][pHasTazer] == 0) {
  945. new szMessage[128];
  946. format(szMessage, sizeof(szMessage), "%s reaches towards their locker, taking a tazer and cuffs out.", GetPlayerNameEx(playerid));
  947. ProxChatBubble(playerid, szMessage);
  948. SendClientMessageEx(playerid, COLOR_WHITE, "You're now carrying a tazer and cuffs on you.");
  949. PlayerInfo[playerid][pHasTazer] = 1;
  950. PlayerInfo[playerid][pHasCuff] = 1;
  951. }
  952. else return SendClientMessageEx(playerid, COLOR_WHITE, "You're already carrying a tazer and pair of cuffs");
  953. }
  954. if (strcmp("Name Change", inputtext) == 0) {
  955. if(PlayerInfo[playerid][pRank] >= arrGroupData[iGroupID][g_iFreeNameChange] && (PlayerInfo[playerid][pDivision] == arrGroupData[iGroupID][g_iFreeNameChangeDiv] || arrGroupData[iGroupID][g_iFreeNameChangeDiv] == INVALID_DIVISION)) {
  956. return ShowPlayerDialogEx( playerid, DIALOG_NAMECHANGE, DIALOG_STYLE_INPUT, "Name Change","Please enter your new desired name!\n\nNote: Name Changes are free for your faction.", "Change", "Cancel" );
  957. }
  958. }
  959. if (strcmp("Accessories", inputtext) == 0) {
  960. return ShowPlayerDialogEx(playerid, BUYTOYSCOP, DIALOG_STYLE_MSGBOX, "Accessories", "Welcome to the law enforcement accessory locker!\n\n(As with regular toys, VIP unlocks more slots.)","Continue", "Cancel");
  961. }
  962. }
  963. case G_LOCKER_EQUIPMENT: if(response)
  964. {
  965. new iGroupID = PlayerInfo[playerid][pMember];
  966. if (listitem == 16)
  967. {
  968. ShowPlayerDialogEx(playerid, BUYTOYSCOP, DIALOG_STYLE_MSGBOX, "Accessories", "Welcome to the law enforcement accessory locker!\n\n(As with regular toys, VIP unlocks more slots.)","Continue", "Cancel");
  969. }
  970. else
  971. {
  972. if(PlayerInfo[playerid][pAccountRestricted] != 0) return SendClientMessageEx(playerid, COLOR_GRAD1, "Your account is restricted!");
  973. new iGunID = arrGroupData[iGroupID][g_iLockerGuns][listitem];
  974. if(arrGroupData[iGroupID][g_iLockerCostType] == 0)
  975. {
  976. if(arrGroupData[iGroupID][g_iLockerStock] >= arrGroupData[iGroupID][g_iLockerCost][listitem])
  977. {
  978. arrGroupData[iGroupID][g_iLockerStock] -= arrGroupData[iGroupID][g_iLockerCost][listitem];
  979. new str[128];
  980. format(str, sizeof(str), "%s took a %s out of the %s locker at a cost of %d HG Materials.", GetPlayerNameEx(playerid), GetWeaponNameEx(iGunID), arrGroupData[iGroupID][g_szGroupName], arrGroupData[iGroupID][g_iLockerCost][listitem]);
  981. GroupPayLog(iGroupID, str);
  982. }
  983. else
  984. {
  985. SendClientMessageEx(playerid, COLOR_RED, "The locker doesn't have the stock for that weapon.");
  986. SendClientMessageEx(playerid, COLOR_GRAD2, "Contact your supervisor or the SAAS and organize a crate delivery.");
  987. return 1;
  988. }
  989. }
  990. else if(arrGroupData[iGroupID][g_iLockerCostType] == 1)
  991. {
  992. if (arrGroupData[iGroupID][g_iBudget] < arrGroupData[iGroupID][g_iLockerCost][listitem])
  993. {
  994. SendClientMessageEx(playerid, COLOR_WHITE, "Your group cannot afford that weapon!");
  995. return 1;
  996. }
  997. else
  998. {
  999. arrGroupData[iGroupID][g_iBudget] -= arrGroupData[iGroupID][g_iLockerCost][listitem];
  1000. new str[128];
  1001. format(str, sizeof(str), "%s took a %s out of the %s locker at a cost of $%d.", GetPlayerNameEx(playerid), GetWeaponNameEx(iGunID), arrGroupData[iGroupID][g_szGroupName], arrGroupData[iGroupID][g_iLockerCost][listitem]);
  1002. GroupPayLog(iGroupID, str);
  1003. }
  1004. }
  1005. else if(arrGroupData[iGroupID][g_iLockerCostType] == 2)
  1006. {
  1007. if (GetPlayerCash(playerid) < arrGroupData[iGroupID][g_iLockerCost][listitem])
  1008. {
  1009. SendClientMessageEx(playerid, COLOR_WHITE, "You can't afford that weapon!");
  1010. return 1;
  1011. }
  1012. else
  1013. {
  1014. GivePlayerCash(playerid, -arrGroupData[iGroupID][g_iLockerCost][listitem]);
  1015. }
  1016. }
  1017. GivePlayerValidWeapon(playerid, iGunID);
  1018. }
  1019. }
  1020. case G_LOCKER_UNIFORM: if(response) {
  1021. new skin = strval(inputtext), iGroupID = PlayerInfo[playerid][pMember];
  1022. if(IsInvalidSkin(skin)) {
  1023. return ShowPlayerDialogEx(playerid, G_LOCKER_UNIFORM, DIALOG_STYLE_INPUT, arrGroupData[iGroupID][g_szGroupName],"Invalid skin specified. Choose another.", "Select", "Cancel");
  1024. }
  1025. PlayerInfo[playerid][pModel] = skin;
  1026. SetPlayerSkin(playerid, PlayerInfo[playerid][pModel]);
  1027. }
  1028. case G_LOCKER_CLEARSUSPECT: if(response)
  1029. {
  1030. if(IsMDCPermitted(playerid))
  1031. {
  1032. new giveplayerid;
  1033. new giveplayer[MAX_PLAYER_NAME];
  1034. new iGroupID = PlayerInfo[playerid][pMember];
  1035. giveplayerid = ReturnUser(inputtext);
  1036. if(IsPlayerConnected(giveplayerid))
  1037. {
  1038. if(giveplayerid != INVALID_PLAYER_ID)
  1039. {
  1040. GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
  1041. GetPlayerName(playerid, sendername, sizeof(sendername));
  1042. format(string, sizeof(string), "* You cleared the records and wanted points of %s.", GetPlayerNameEx(giveplayerid));
  1043. SendClientMessageEx(playerid, COLOR_LIGHTBLUE, string);
  1044. format(string, sizeof(string), "* %s %s has cleared your records and wanted points.", arrGroupRanks[iGroupID][PlayerInfo[playerid][pRank]], GetPlayerNameEx(playerid));
  1045. SendClientMessageEx(giveplayerid, COLOR_LIGHTBLUE, string);
  1046. format(string, sizeof(string), "* %s %s has cleared %s's records and wanted points.", arrGroupRanks[iGroupID][PlayerInfo[playerid][pRank]], GetPlayerNameEx(playerid), GetPlayerNameEx(giveplayerid));
  1047. SendGroupMessage(GROUP_TYPE_LEA, RADIO, string);
  1048. PlayerInfo[giveplayerid][pWantedLevel] = 0;
  1049. SetPlayerToTeamColor(giveplayerid);
  1050. SetPlayerWantedLevel(giveplayerid, 0);
  1051. ClearCrimes(giveplayerid, playerid);
  1052. PlayerInfo[giveplayerid][pWantedJailFine] = 0;
  1053. PlayerInfo[giveplayerid][pWantedJailTime] = 0;
  1054. }
  1055. else
  1056. {
  1057. SendClientMessageEx(playerid, COLOR_GREY, "Invalid player specified.");
  1058. }
  1059. }
  1060. }
  1061. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You don't have sufficient clearance to do this");
  1062. }
  1063. case DIALOG_LISTGROUPS: if(response) {
  1064. if(PlayerInfo[playerid][pAdmin] < 4 && PlayerInfo[playerid][pASM] < 1 && PlayerInfo[playerid][pFactionModerator] < 2) return 1;
  1065. SetPVarInt(playerid, "Group_EditID", listitem);
  1066. return Group_DisplayDialog(playerid, listitem);
  1067. }
  1068. case DIALOG_EDITGROUP: {
  1069. if(PlayerInfo[playerid][pAdmin] < 4 && PlayerInfo[playerid][pASM] < 1 && PlayerInfo[playerid][pFactionModerator] < 2) return 1;
  1070. new
  1071. iGroupID = GetPVarInt(playerid, "Group_EditID"),
  1072. szTitle[64 + GROUP_MAX_NAME_LEN];
  1073. if(response) switch(listitem) {
  1074. case 0: {
  1075. format(szTitle, sizeof szTitle, "Edit Group Name {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1076. ShowPlayerDialogEx(playerid, DIALOG_GROUP_NAME, DIALOG_STYLE_INPUT, szTitle, "Specify a name for this group.", "Confirm", "Cancel");
  1077. }
  1078. case 1: {
  1079. new
  1080. szDialog[(32 + 2) * MAX_GROUP_TYPES];
  1081. for(new i = 0; i != MAX_GROUP_TYPES; ++i)
  1082. strcat(szDialog, "\n"), strcat(szDialog, Group_ReturnType(i));
  1083. format(szTitle, sizeof szTitle, "Edit Group Type {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1084. ShowPlayerDialogEx(playerid, DIALOG_GROUP_TYPE, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1085. }
  1086. case 2: {
  1087. new
  1088. szDialog[(32 + 2) * MAX_GROUP_TYPES];
  1089. for(new i = 0; i < MAX_GROUP_ALLEGIANCES; ++i)
  1090. strcat(szDialog, "\n"), strcat(szDialog, Group_ReturnAllegiance(i));
  1091. format(szTitle, sizeof szTitle, "Edit Group Allegiance {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1092. ShowPlayerDialogEx(playerid, DIALOG_GROUP_ALLEGIANCE, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1093. }
  1094. case 3:
  1095. {
  1096. if(arrGroupData[iGroupID][g_iJCount] == 0)
  1097. {
  1098. format(string, sizeof(string), "%s doesn't have any jurisdiction. Add it via /groupaddjurisdiction", arrGroupData[iGroupID][g_szGroupName]);
  1099. SendClientMessage(playerid, COLOR_GRAD2, string);
  1100. return Group_DisplayDialog(playerid, iGroupID);
  1101. }
  1102. else
  1103. {
  1104. new szDialog[2500];
  1105. for(new i; i < arrGroupData[iGroupID][g_iJCount]; ++i)
  1106. {
  1107. strcat(szDialog, "\n"), strcat(szDialog, arrGroupJurisdictions[iGroupID][i][g_iAreaName]);
  1108. }
  1109. format(szTitle, sizeof szTitle, "Edit Group Jurisdiction {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1110. ShowPlayerDialogEx(playerid, DIALOG_GROUP_JURISDICTION_LIST, DIALOG_STYLE_LIST, szTitle, szDialog, "Remove", "Go Back");
  1111. }
  1112. }
  1113. case 4: {
  1114. format(szTitle, sizeof szTitle, "Edit Group Duty Color {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1115. ShowPlayerDialogEx(playerid, DIALOG_GROUP_DUTYCOL, DIALOG_STYLE_INPUT, szTitle, "Enter a colour in hexadecimal format (for example, BCA3FF). This colour will be used to identify the group (i.e. name tag colour).", "Confirm", "Cancel");
  1116. }
  1117. case 5: {
  1118. format(szTitle, sizeof szTitle, "Edit Group Radio Color {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1119. ShowPlayerDialogEx(playerid, DIALOG_GROUP_RADIOCOL, DIALOG_STYLE_INPUT, szTitle, "Enter a colour in hexadecimal format (for example, BCA3FF). This colour will be used for the group's in-character radio chat.", "Confirm", "Cancel");
  1120. }
  1121. case 6 .. 9, 11, 13, 15 .. 22: {
  1122. new
  1123. szDialog[((32 + 5) * MAX_GROUP_RANKS) + 24];
  1124. for(new i = 0; i != MAX_GROUP_RANKS; ++i)
  1125. format(szDialog, sizeof szDialog, "%s\n(%i) %s", szDialog, i, ((arrGroupRanks[iGroupID][i][0]) ? (arrGroupRanks[iGroupID][i]) : ("{BBBBBB}(undefined){FFFFFF}")));
  1126. strcat(szDialog, "\nRevoke from Group");
  1127. strmid(szTitle, inputtext, 0, strfind(inputtext, ":", true));
  1128. format(szTitle, sizeof szTitle, "Edit Group %s", szTitle);
  1129. if(listitem < 10) ShowPlayerDialogEx(playerid, DIALOG_GROUP_RADIOACC + (listitem - 6), DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1130. if(listitem > 10) ShowPlayerDialogEx(playerid, DIALOG_GROUP_RADIOACC + (listitem - 8), DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1131. }
  1132. case 10: {
  1133. new
  1134. szDialog[((32 + 5) * MAX_GROUP_RANKS) + 24];
  1135. for(new i = 0; i != MAX_GROUP_RANKS; ++i)
  1136. format(szDialog, sizeof szDialog, "%s\n(%i) %s", szDialog, i, ((arrGroupRanks[iGroupID][i][0]) ? (arrGroupRanks[iGroupID][i]) : ("{BBBBBB}(undefined){FFFFFF}")));
  1137. strcat(szDialog, "\nRevoke from Group");
  1138. strmid(szTitle, inputtext, 0, strfind(inputtext, ":", true));
  1139. format(szTitle, sizeof szTitle, "Edit Group %s", szTitle);
  1140. ShowPlayerDialogEx(playerid, DIALOG_GROUP_FINDACC, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1141. }
  1142. case 12: {
  1143. new
  1144. szDialog[((32 + 5) * MAX_GROUP_RANKS) + 24];
  1145. for(new i = 0; i != MAX_GROUP_RANKS; ++i)
  1146. format(szDialog, sizeof szDialog, "%s\n(%i) %s", szDialog, i, ((arrGroupRanks[iGroupID][i][0]) ? (arrGroupRanks[iGroupID][i]) : ("{BBBBBB}(undefined){FFFFFF}")));
  1147. strcat(szDialog, "\nRevoke from Group");
  1148. strmid(szTitle, inputtext, 0, strfind(inputtext, ":", true));
  1149. format(szTitle, sizeof szTitle, "Edit Group %s", szTitle);
  1150. ShowPlayerDialogEx(playerid, DIALOG_GROUP_TRESACC, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1151. }
  1152. case 14: {
  1153. new
  1154. szDialog[((32 + 5) * MAX_GROUP_DIVS) + 24];
  1155. for(new i = 0; i != MAX_GROUP_RANKS; ++i)
  1156. format(szDialog, sizeof szDialog, "%s\n(%i) %s", szDialog, i, ((arrGroupDivisions[iGroupID][i][0]) ? (arrGroupDivisions[iGroupID][i]) : ("{BBBBBB}(undefined){FFFFFF}")));
  1157. strcat(szDialog, "\nRevoke from Group");
  1158. strmid(szTitle, inputtext, 0, strfind(inputtext, ":", true));
  1159. format(szTitle, sizeof szTitle, "Edit Group %s", szTitle);
  1160. ShowPlayerDialogEx(playerid, DIALOG_GROUP_RADIOACC + (listitem - 8), DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1161. }
  1162. case 23: {
  1163. format(szTitle, sizeof szTitle, "Edit Group Locker Stock {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1164. ShowPlayerDialogEx(playerid, DIALOG_GROUP_EDITSTOCK, DIALOG_STYLE_INPUT, szTitle, "Specify a value. Locker stock is used for weapons, and can be replenished using crates.", "Confirm", "Cancel");
  1165. }
  1166. case 24: {
  1167. new
  1168. szDialog[(32 + 8) * MAX_GROUP_WEAPONS];
  1169. for(new i = 0; i != MAX_GROUP_WEAPONS; ++i) {
  1170. if(arrGroupData[iGroupID][g_iLockerGuns][i]) format(szDialog, sizeof szDialog, "%s\n(%i) %s (cost: %i)", szDialog, arrGroupData[iGroupID][g_iLockerGuns][i], Weapon_ReturnName(arrGroupData[iGroupID][g_iLockerGuns][i]), arrGroupData[iGroupID][g_iLockerCost][i]);
  1171. else strcat(szDialog, "\n(empty)");
  1172. }
  1173. format(szTitle, sizeof szTitle, "Edit Group Weapons {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1174. ShowPlayerDialogEx(playerid, DIALOG_GROUP_EDITWEPS, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1175. }
  1176. case 25: {
  1177. new
  1178. szDialog[(GROUP_MAX_RANK_LEN + 8) * MAX_GROUP_RANKS];
  1179. for(new i = 0; i != MAX_GROUP_RANKS; ++i) {
  1180. format(szDialog, sizeof szDialog, "%s\nRank %i (%s): $%s", szDialog, i, arrGroupRanks[iGroupID][i], number_format(arrGroupData[iGroupID][g_iPaycheck][i]));
  1181. }
  1182. format(szTitle, sizeof szTitle, "Edit Group Paychecks {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1183. ShowPlayerDialogEx(playerid, DIALOG_GROUP_LISTPAY, DIALOG_STYLE_LIST, szTitle, szDialog, "Edit", "Cancel");
  1184. }
  1185. case 26: {
  1186. new
  1187. szDialog[(GROUP_MAX_DIV_LEN + 8) * MAX_GROUP_DIVS];
  1188. for(new i = 0; i != MAX_GROUP_DIVS; ++i) {
  1189. format(szDialog, sizeof szDialog, "%s\n(%i) %s", szDialog, i + 1, ((arrGroupDivisions[iGroupID][i][0]) ? (arrGroupDivisions[iGroupID][i]) : ("{BBBBBB}(undefined){FFFFFF}")));
  1190. }
  1191. format(szTitle, sizeof szTitle, "Edit Group Divisions {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1192. ShowPlayerDialogEx(playerid, DIALOG_GROUP_EDITDIVS, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1193. }
  1194. case 27: {
  1195. new
  1196. szDialog[(GROUP_MAX_RANK_LEN + 8) * MAX_GROUP_RANKS];
  1197. for(new i = 0; i != MAX_GROUP_RANKS; ++i) {
  1198. format(szDialog, sizeof szDialog, "%s\n(%i) %s", szDialog, i, ((arrGroupRanks[iGroupID][i][0]) ? (arrGroupRanks[iGroupID][i]) : ("{BBBBBB}(undefined){FFFFFF}")));
  1199. }
  1200. format(szTitle, sizeof szTitle, "Edit Group Ranks {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1201. ShowPlayerDialogEx(playerid, DIALOG_GROUP_EDITRANKS, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1202. }
  1203. case 28: {
  1204. new
  1205. szDialog[MAX_GROUP_LOCKERS * 32];
  1206. for(new i = 0; i < MAX_GROUP_LOCKERS; ++i) {
  1207. format(szDialog, sizeof szDialog, "%s%Locker %d %s ID:%d\n", szDialog, i+1, ( arrGroupLockers[iGroupID][i][g_fLockerPos][0] != 0.0 ) ? ("(edit)") : ("(undefined)"), arrGroupLockers[iGroupID][i]);
  1208. }
  1209. strcat(szDialog, "Delete All Lockers");
  1210. format(szTitle, sizeof szTitle, "Edit Group Lockers {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1211. ShowPlayerDialogEx(playerid, DIALOG_GROUP_LOCKERS, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1212. }
  1213. case 29: {
  1214. format(szTitle, sizeof szTitle, "Edit Group Crate Delivery Position {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1215. ShowPlayerDialogEx(playerid, DIALOG_GROUP_CRATEPOS, DIALOG_STYLE_MSGBOX, szTitle, "Are you sure you want to move the crate delivery to your position?\n\nIf not, cancel and move to your desired location.", "Cancel", "Confirm");
  1216. }
  1217. case 30: {
  1218. format(szTitle, sizeof szTitle, "Edit Group Locker Cost Type {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1219. ShowPlayerDialogEx(playerid, DIALOG_GROUP_COSTTYPE, DIALOG_STYLE_LIST, szTitle, "Locker Stock\nGroup Budget\nPlayer Money", "OK", "Cancel");
  1220. }
  1221. case 31: {
  1222. format(szTitle, sizeof szTitle, "Edit the Garage Position {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1223. ShowPlayerDialogEx(playerid, DIALOG_GROUP_GARAGEPOS, DIALOG_STYLE_MSGBOX, szTitle, "Please click on 'Confirm' to change the garage location to your current position.\n\nIf you do not wish to move it to your position, click on 'Cancel'.", "Cancel", "Confirm");
  1224. }
  1225. case 32: {
  1226. new
  1227. szDialog[((32 + 5) * MAX_GROUP_RANKS) + 24];
  1228. for(new i = 0; i != MAX_GROUP_RANKS; ++i)
  1229. format(szDialog, sizeof szDialog, "%s\n(%i) %s", szDialog, i, ((arrGroupRanks[iGroupID][i][0]) ? (arrGroupRanks[iGroupID][i]) : ("{BBBBBB}(undefined){FFFFFF}")));
  1230. strcat(szDialog, "\nRevoke from Group");
  1231. format(szTitle, sizeof szTitle, "Edit Group Tackle Access");
  1232. ShowPlayerDialogEx(playerid, DIALOG_GROUP_TACKLEACCESS, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1233. }
  1234. case 33: {
  1235. new
  1236. szDialog[((32 + 5) * MAX_GROUP_RANKS) + 24];
  1237. for(new i = 0; i != MAX_GROUP_RANKS; ++i)
  1238. format(szDialog, sizeof szDialog, "%s\n(%i) %s", szDialog, i, ((arrGroupRanks[iGroupID][i][0]) ? (arrGroupRanks[iGroupID][i]) : ("{BBBBBB}(undefined){FFFFFF}")));
  1239. strcat(szDialog, "\nRevoke from Group");
  1240. format(szTitle, sizeof szTitle, "Edit Group Wheel Clamps Access {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1241. ShowPlayerDialogEx(playerid, DIALOG_GROUP_WHEELCLAMPS, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1242. }
  1243. case 34: {
  1244. new
  1245. szDialog[((32 + 5) * MAX_GROUP_RANKS) + 24];
  1246. for(new i = 0; i != MAX_GROUP_RANKS; ++i)
  1247. format(szDialog, sizeof szDialog, "%s\n(%i) %s", szDialog, i, ((arrGroupRanks[iGroupID][i][0]) ? (arrGroupRanks[iGroupID][i]) : ("{BBBBBB}(undefined){FFFFFF}")));
  1248. strcat(szDialog, "\nRevoke from Group");
  1249. format(szTitle, sizeof szTitle, "Edit Group DoC Access {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1250. ShowPlayerDialogEx(playerid, DIALOG_GROUP_DOCACCESS, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1251. }
  1252. case 35: {
  1253. new
  1254. szDialog[((32 + 5) * MAX_GROUP_DIVS) + 24];
  1255. for(new i = 0; i != MAX_GROUP_DIVS; ++i)
  1256. format(szDialog, sizeof szDialog, "%s\n(%i) %s", szDialog, i, ((arrGroupDivisions[iGroupID][i][0]) ? (arrGroupDivisions[iGroupID][i]) : ("{BBBBBB}(undefined){FFFFFF}")));
  1257. strcat(szDialog, "\nRevoke from Group");
  1258. format(szTitle, sizeof szTitle, "Edit Group Medic Access {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1259. ShowPlayerDialogEx(playerid, DIALOG_GROUP_MEDICACCESS, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1260. }
  1261. case 36: {
  1262. new
  1263. szDialog[((32 + 5) * MAX_GROUP_RANKS) + 24];
  1264. for(new i = 0; i != MAX_GROUP_RANKS; ++i)
  1265. format(szDialog, sizeof szDialog, "%s\n(%i) %s", szDialog, i, ((arrGroupRanks[iGroupID][i][0]) ? (arrGroupRanks[iGroupID][i]) : ("{BBBBBB}(undefined){FFFFFF}")));
  1266. strcat(szDialog, "\nRevoke from Group");
  1267. format(szTitle, sizeof szTitle, "Edit Group DMV Access {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1268. ShowPlayerDialogEx(playerid, DIALOG_GROUP_DMVACCESS, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1269. }
  1270. case 37: {
  1271. new
  1272. szDialog[((32 + 5) * MAX_GROUP_RANKS) + 24];
  1273. for(new i = 0; i != MAX_GROUP_RANKS; ++i)
  1274. format(szDialog, sizeof szDialog, "%s\n(%i) %s", szDialog, i, ((arrGroupRanks[iGroupID][i][0]) ? (arrGroupRanks[iGroupID][i]) : ("{BBBBBB}(undefined){FFFFFF}")));
  1275. strcat(szDialog, "\nRevoke from Group");
  1276. format(szTitle, sizeof szTitle, "Edit Group Temp Number Access {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1277. ShowPlayerDialogEx(playerid, DIALOG_GROUP_TEMPNUMACCESS, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1278. }
  1279. case 38: {
  1280. new
  1281. szDialog[((32 + 5) * MAX_GROUP_RANKS) + 24];
  1282. for(new i = 0; i != MAX_GROUP_RANKS; ++i)
  1283. format(szDialog, sizeof szDialog, "%s\n(%i) %s", szDialog, i, ((arrGroupRanks[iGroupID][i][0]) ? (arrGroupRanks[iGroupID][i]) : ("{BBBBBB}(undefined){FFFFFF}")));
  1284. strcat(szDialog, "\nRevoke from Group");
  1285. format(szTitle, sizeof szTitle, "Edit Group LEO Arrest Access {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1286. ShowPlayerDialogEx(playerid, DIALOG_GROUP_LEOARRESTACCESS, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1287. }
  1288. case 39: {
  1289. new
  1290. szDialog[((32 + 5) * MAX_GROUP_RANKS) + 24];
  1291. for(new i = 0; i != MAX_GROUP_RANKS; ++i)
  1292. format(szDialog, sizeof szDialog, "%s\n(%i) %s", szDialog, i, ((arrGroupRanks[iGroupID][i][0]) ? (arrGroupRanks[iGroupID][i]) : ("{BBBBBB}(undefined){FFFFFF}")));
  1293. strcat(szDialog, "\nRevoke from Group");
  1294. format(szTitle, sizeof szTitle, "Edit Group OOC Chat Access {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1295. ShowPlayerDialogEx(playerid, DIALOG_GROUP_OOCCHAT, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1296. }
  1297. case 40: {
  1298. format(szTitle, sizeof szTitle, "Edit Group OOC Chat Color {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1299. ShowPlayerDialogEx(playerid, DIALOG_GROUP_OOCCOLOR, DIALOG_STYLE_INPUT, szTitle, "Enter a color in hexadecimal format (for example, BCA3FF). This color will be that of their OOC Chat.", "Confirm", "Cancel");
  1300. }
  1301. case 41: {
  1302. new
  1303. szDialog[(GROUP_MAX_RANK_LEN + 8) * MAX_GROUP_RANKS];
  1304. for(new i = 0; i != MAX_GROUP_RANKS; ++i) {
  1305. format(szDialog, sizeof szDialog, "%s\nRank %i (%s): Skin ID:%i", szDialog, i, arrGroupRanks[iGroupID][i], arrGroupData[iGroupID][g_iClothes][i]);
  1306. }
  1307. format(szTitle, sizeof szTitle, "Edit Group Clothes {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1308. ShowPlayerDialogEx(playerid, DIALOG_GROUP_LISTCLOTHES, DIALOG_STYLE_LIST, szTitle, szDialog, "Edit", "Cancel");
  1309. }
  1310. case 42: {
  1311. new
  1312. szDialog[((32 + 5) * MAX_GROUP_RANKS) + 24];
  1313. for(new i = 0; i != MAX_GROUP_RANKS; ++i)
  1314. format(szDialog, sizeof szDialog, "%s\n(%i) %s", szDialog, i, ((arrGroupRanks[iGroupID][i][0]) ? (arrGroupRanks[iGroupID][i]) : ("{BBBBBB}(undefined){FFFFFF}")));
  1315. strcat(szDialog, "\nRevoke from Group");
  1316. format(szTitle, sizeof szTitle, "Edit Group Turf Cap Rank {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1317. ShowPlayerDialogEx(playerid, DIALOG_GROUP_TURFCAP, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1318. }
  1319. case 43: {
  1320. new
  1321. szDialog[((32 + 5) * MAX_GROUP_RANKS) + 24];
  1322. for(new i = 0; i != MAX_GROUP_RANKS; ++i)
  1323. format(szDialog, sizeof szDialog, "%s\n(%i) %s", szDialog, i, ((arrGroupRanks[iGroupID][i][0]) ? (arrGroupRanks[iGroupID][i]) : ("{BBBBBB}(undefined){FFFFFF}")));
  1324. strcat(szDialog, "\nRevoke from Group");
  1325. format(szTitle, sizeof szTitle, "Edit Group Point Cap Rank {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1326. ShowPlayerDialogEx(playerid, DIALOG_GROUP_POINTCAP, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1327. }
  1328. case 44: {
  1329. format(szTitle, sizeof szTitle, "Edit Group Crime Type {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1330. ShowPlayerDialogEx(playerid, DIALOG_GROUP_CRIMETYPE, DIALOG_STYLE_LIST, szTitle, "None\nRacer", "Select", "Cancel");
  1331. }
  1332. default: {
  1333. format(szTitle, sizeof szTitle, "{FF0000}Disband Group{FFFFFF} {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1334. ShowPlayerDialogEx(playerid, DIALOG_GROUP_DISBAND, DIALOG_STYLE_MSGBOX, szTitle, "{FFFFFF}Are you absolutely sure you wish to {FF0000}disband this group?{FFFFFF}\n\n\
  1335. This action will {FF0000}delete all group data and remove all members and leaders{FFFFFF} from the group, whether online or offline.", "Cancel", "Confirm");
  1336. }
  1337. }
  1338. else if(GetPVarType(playerid, "Group_EditID")) { // They've made changes to a group setting - save it on exit!
  1339. SaveGroup(GetPVarInt(playerid, "Group_EditID"));
  1340. DeletePVar(playerid, "Group_EditID");
  1341. return Group_ListGroups(playerid);
  1342. }
  1343. }
  1344. case DIALOG_GROUP_NAME: {
  1345. new
  1346. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1347. if(response) {
  1348. new
  1349. szTitle[32 + GROUP_MAX_NAME_LEN];
  1350. if(!(2 < strlen(inputtext) < GROUP_MAX_NAME_LEN)) {
  1351. format(szTitle, sizeof szTitle, "Edit Group {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1352. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_NAME, DIALOG_STYLE_INPUT, szTitle, "The specified name must be between 2 and "#GROUP_MAX_NAME_LEN" characters.\n\nSpecify a name for this group.", "Confirm", "Cancel");
  1353. }
  1354. format(string, sizeof(string), "%s has changed group %d's name from %s to %s", GetPlayerNameEx(playerid), iGroupID+1, arrGroupData[iGroupID][g_szGroupName], inputtext);
  1355. Log("logs/editgroup.log", string);
  1356. strcpy(arrGroupData[iGroupID][g_szGroupName], inputtext, GROUP_MAX_NAME_LEN);
  1357. }
  1358. return Group_DisplayDialog(playerid, GetPVarInt(playerid, "Group_EditID"));
  1359. }
  1360. case DIALOG_GROUP_TYPE: {
  1361. new
  1362. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1363. if(response) {
  1364. arrGroupData[iGroupID][g_iGroupType] = listitem;
  1365. format(string, sizeof(string), "%s has changed group %d's type to %s", GetPlayerNameEx(playerid), iGroupID+1, Group_ReturnType(arrGroupData[iGroupID][g_iGroupType]));
  1366. Log("logs/editgroup.log", string);
  1367. }
  1368. return Group_DisplayDialog(playerid, iGroupID);
  1369. }
  1370. case DIALOG_GROUP_ALLEGIANCE: {
  1371. new
  1372. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1373. if(response) arrGroupData[iGroupID][g_iAllegiance] = listitem;
  1374. format(string, sizeof(string), "%s has changed group %d's allegiance to %s", GetPlayerNameEx(playerid), iGroupID+1, Group_ReturnAllegiance(arrGroupData[iGroupID][g_iAllegiance]));
  1375. Log("logs/editgroup.log", string);
  1376. return Group_DisplayDialog(playerid, iGroupID);
  1377. }
  1378. case DIALOG_GROUP_JURISDICTION_LIST: {
  1379. new iGroupID = GetPVarInt(playerid, "Group_EditID");
  1380. if(response)
  1381. {
  1382. new szTitle[128], szDialog[128];
  1383. format(szTitle, sizeof(szTitle), "%s's Jurisdiction", arrGroupData[iGroupID][g_szGroupName]);
  1384. format(szDialog, sizeof(szDialog), "Are you sure you want to remove %s from the %s?", arrGroupJurisdictions[iGroupID][listitem][g_iAreaName], arrGroupData[iGroupID][g_szGroupName]);
  1385. SetPVarInt(playerid, "JurisdictionRemoval", listitem);
  1386. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_JURISDICTION_REMOVE, DIALOG_STYLE_MSGBOX, szTitle, szDialog, "Confirm", "Cancel");
  1387. }
  1388. else return Group_DisplayDialog(playerid, iGroupID);
  1389. }
  1390. case DIALOG_GROUP_JURISDICTION_REMOVE: {
  1391. new iGroupID = GetPVarInt(playerid, "Group_EditID");
  1392. if(response)
  1393. {
  1394. new jurisdictionid = GetPVarInt(playerid, "JurisdictionRemoval");
  1395. mysql_format(MainPipeline, string, sizeof(string), "DELETE FROM `jurisdictions` WHERE `id` = %i", arrGroupJurisdictions[iGroupID][jurisdictionid][g_iJurisdictionSQLId]);
  1396. mysql_tquery(MainPipeline, string, "OnQueryFinish", "i", SENDDATA_THREAD);
  1397. mysql_tquery(MainPipeline, "SELECT * FROM `jurisdictions`", "Group_QueryFinish", "ii", GROUP_QUERY_JURISDICTIONS, 0);
  1398. format(string, sizeof(string), "You have successfully removed %s from %s.", arrGroupJurisdictions[iGroupID][jurisdictionid][g_iAreaName], arrGroupData[iGroupID][g_szGroupName]);
  1399. SendClientMessage(playerid, COLOR_WHITE, string);
  1400. format(string, sizeof(string), "%s has removed %s from group %d's jurisdictions.", GetPlayerNameEx(playerid), arrGroupJurisdictions[iGroupID][jurisdictionid][g_iAreaName], iGroupID+1);
  1401. Log("logs/editgroup.log", string);
  1402. }
  1403. DeletePVar(playerid, "JurisdictionRemoval");
  1404. return Group_DisplayDialog(playerid, iGroupID);
  1405. }
  1406. case DIALOG_GROUP_RADIOACC: {
  1407. new
  1408. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1409. if(response) switch(listitem) {
  1410. case MAX_GROUP_RANKS: {
  1411. arrGroupData[iGroupID][g_iRadioAccess] = INVALID_RANK;
  1412. format(string, sizeof(string), "%s has revoked the radio (/r) access from group %d (%s)", GetPlayerNameEx(playerid), iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1413. }
  1414. default: {
  1415. arrGroupData[iGroupID][g_iRadioAccess] = listitem;
  1416. format(string, sizeof(string), "%s has set the minimum rank for radio (/r) to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iRadioAccess], arrGroupRanks[iGroupID][arrGroupData[iGroupID][g_iRadioAccess]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1417. }
  1418. }
  1419. Log("logs/editgroup.log", string);
  1420. return Group_DisplayDialog(playerid, iGroupID);
  1421. }
  1422. case DIALOG_GROUP_DEPTRADIOACC: {
  1423. new
  1424. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1425. if(response) switch(listitem) {
  1426. case MAX_GROUP_RANKS: {
  1427. arrGroupData[iGroupID][g_iDeptRadioAccess] = INVALID_RANK;
  1428. format(string, sizeof(string), "%s has revoked the dept radio (/dept) access from group %d (%s)", GetPlayerNameEx(playerid), iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1429. }
  1430. default:{
  1431. arrGroupData[iGroupID][g_iDeptRadioAccess] = listitem;
  1432. format(string, sizeof(string), "%s has set the minimum rank for dept radio (/dept) to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iDeptRadioAccess], arrGroupRanks[iGroupID][arrGroupData[iGroupID][g_iDeptRadioAccess]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1433. }
  1434. }
  1435. Log("logs/editgroup.log", string);
  1436. return Group_DisplayDialog(playerid, iGroupID);
  1437. }
  1438. case DIALOG_GROUP_INTRADIOACC: {
  1439. new
  1440. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1441. if(response) switch(listitem) {
  1442. case MAX_GROUP_RANKS: {
  1443. arrGroupData[iGroupID][g_iIntRadioAccess] = INVALID_RANK;
  1444. format(string, sizeof(string), "%s has revoked the int radio (/int) access from group %d (%s)", GetPlayerNameEx(playerid), iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1445. }
  1446. default: {
  1447. arrGroupData[iGroupID][g_iIntRadioAccess] = listitem;
  1448. format(string, sizeof(string), "%s has set the minimum rank for int radio (/int) to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iIntRadioAccess], arrGroupRanks[iGroupID][arrGroupData[iGroupID][g_iIntRadioAccess]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1449. }
  1450. }
  1451. Log("logs/editgroup.log", string);
  1452. return Group_DisplayDialog(playerid, iGroupID);
  1453. }
  1454. case DIALOG_GROUP_BUGACC: {
  1455. new
  1456. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1457. if(response) switch(listitem) {
  1458. case MAX_GROUP_RANKS: {
  1459. arrGroupData[iGroupID][g_iBugAccess] = INVALID_RANK;
  1460. format(string, sizeof(string), "%s has revoked the bug (/bug) access from group %d (%s)", GetPlayerNameEx(playerid), iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1461. }
  1462. default: {
  1463. arrGroupData[iGroupID][g_iBugAccess] = listitem;
  1464. format(string, sizeof(string), "%s has set the minimum rank for bug access (/bug) to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iBugAccess], arrGroupRanks[iGroupID][arrGroupData[iGroupID][g_iBugAccess]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1465. }
  1466. }
  1467. Log("logs/editgroup.log", string);
  1468. return Group_DisplayDialog(playerid, iGroupID);
  1469. }
  1470. case DIALOG_GROUP_FINDACC: {
  1471. new
  1472. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1473. if(response) switch(listitem) {
  1474. case MAX_GROUP_RANKS: {
  1475. arrGroupData[iGroupID][g_iFindAccess] = INVALID_RANK;
  1476. format(string, sizeof(string), "%s has revoked find (/hfind) access from group %d (%s)", GetPlayerNameEx(playerid), iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1477. }
  1478. default: {
  1479. arrGroupData[iGroupID][g_iFindAccess] = listitem;
  1480. format(string, sizeof(string), "%s has set the minimum rank for find access (/hfind) to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iFindAccess], arrGroupRanks[iGroupID][arrGroupData[iGroupID][g_iFindAccess]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1481. }
  1482. }
  1483. Log("logs/editgroup.log", string);
  1484. return Group_DisplayDialog(playerid, iGroupID);
  1485. }
  1486. case DIALOG_GROUP_GOVACC: {
  1487. new
  1488. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1489. if(response) switch(listitem) {
  1490. case MAX_GROUP_RANKS: {
  1491. arrGroupData[iGroupID][g_iGovAccess] = INVALID_RANK;
  1492. format(string, sizeof(string), "%s has revoked government announcement (/gov) access from group %d (%s)", GetPlayerNameEx(playerid), iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1493. }
  1494. default: {
  1495. arrGroupData[iGroupID][g_iGovAccess] = listitem;
  1496. format(string, sizeof(string), "%s has set the minimum rank for government announcement (/gov) to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iGovAccess], arrGroupRanks[iGroupID][arrGroupData[iGroupID][g_iGovAccess]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1497. }
  1498. }
  1499. Log("logs/editgroup.log", string);
  1500. return Group_DisplayDialog(playerid, iGroupID);
  1501. }
  1502. case DIALOG_GROUP_TRESACC: {
  1503. new
  1504. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1505. if(response) switch(listitem) {
  1506. case MAX_GROUP_RANKS: {
  1507. arrGroupData[iGroupID][g_iTreasuryAccess] = INVALID_RANK;
  1508. format(string, sizeof(string), "%s has revoked treasury Access (/setbudget) access from group %d (%s)", GetPlayerNameEx(playerid), iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1509. }
  1510. default: {
  1511. arrGroupData[iGroupID][g_iTreasuryAccess] = listitem;
  1512. format(string, sizeof(string), "%s has set the minimum rank for treasury Access (/setbudget) to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iTreasuryAccess], arrGroupRanks[iGroupID][arrGroupData[iGroupID][g_iTreasuryAccess]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1513. }
  1514. }
  1515. Log("logs/editgroup.log", string);
  1516. return Group_DisplayDialog(playerid, iGroupID);
  1517. }
  1518. case DIALOG_GROUP_FREENC: {
  1519. new
  1520. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1521. if(response) switch(listitem) {
  1522. case MAX_GROUP_RANKS: {
  1523. arrGroupData[iGroupID][g_iFreeNameChange] = INVALID_RANK;
  1524. format(string, sizeof(string), "%s has revoked free name changes access from group %d (%s)", GetPlayerNameEx(playerid), iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1525. }
  1526. default: {
  1527. arrGroupData[iGroupID][g_iFreeNameChange] = listitem;
  1528. format(string, sizeof(string), "%s has set the minimum rank for free name changes to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iFreeNameChange], arrGroupRanks[iGroupID][arrGroupData[iGroupID][g_iFreeNameChange]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1529. }
  1530. }
  1531. Log("logs/editgroup.log", string);
  1532. return Group_DisplayDialog(playerid, iGroupID);
  1533. }
  1534. case DIALOG_GROUP_FREEDIVNC: {
  1535. new
  1536. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1537. if(response) switch(listitem) {
  1538. case MAX_GROUP_DIVS: {
  1539. arrGroupData[iGroupID][g_iFreeNameChangeDiv] = INVALID_DIVISION;
  1540. format(string, sizeof(string), "%s has revoked the division for free name changes from group %d (%s)", GetPlayerNameEx(playerid), iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1541. }
  1542. default: {
  1543. arrGroupData[iGroupID][g_iFreeNameChangeDiv] = listitem;
  1544. format(string, sizeof(string), "%s has set the division for free name changes to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iFreeNameChange], arrGroupDivisions[iGroupID][arrGroupData[iGroupID][g_iFreeNameChange]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1545. }
  1546. }
  1547. Log("logs/editgroup.log", string);
  1548. return Group_DisplayDialog(playerid, iGroupID);
  1549. }
  1550. case DIALOG_GROUP_SPIKES: {
  1551. new
  1552. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1553. if(response) switch(listitem) {
  1554. case MAX_GROUP_RANKS: {
  1555. arrGroupData[iGroupID][g_iSpikeStrips] = INVALID_RANK;
  1556. format(string, sizeof(string), "%s has revoked spikes (/deploy spikes) from group %d (%s)", GetPlayerNameEx(playerid), iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1557. }
  1558. default: {
  1559. arrGroupData[iGroupID][g_iSpikeStrips] = listitem;
  1560. format(string, sizeof(string), "%s has set the minimum rank for spikes (/deploy spikes) to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iSpikeStrips], arrGroupRanks[iGroupID][arrGroupData[iGroupID][g_iSpikeStrips]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1561. }
  1562. }
  1563. Log("logs/editgroup.log", string);
  1564. return Group_DisplayDialog(playerid, iGroupID);
  1565. }
  1566. case DIALOG_GROUP_CADES: {
  1567. new
  1568. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1569. if(response) switch(listitem) {
  1570. case MAX_GROUP_RANKS: {
  1571. arrGroupData[iGroupID][g_iBarricades] = INVALID_RANK;
  1572. format(string, sizeof(string), "%s has revoked cades (/deploy cades) from group %d (%s)", GetPlayerNameEx(playerid), iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1573. }
  1574. default: {
  1575. arrGroupData[iGroupID][g_iBarricades] = listitem;
  1576. format(string, sizeof(string), "%s has set the minimum rank for cades (/deploy cades) to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iBarricades], arrGroupRanks[iGroupID][arrGroupData[iGroupID][g_iBarricades]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1577. }
  1578. }
  1579. Log("logs/editgroup.log", string);
  1580. return Group_DisplayDialog(playerid, iGroupID);
  1581. }
  1582. case DIALOG_GROUP_CONES: {
  1583. new
  1584. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1585. if(response) switch(listitem) {
  1586. case MAX_GROUP_RANKS: {
  1587. arrGroupData[iGroupID][g_iCones] = INVALID_RANK;
  1588. format(string, sizeof(string), "%s has revoked cones (/deploy cone) from group %d (%s)", GetPlayerNameEx(playerid), iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1589. }
  1590. default: {
  1591. arrGroupData[iGroupID][g_iCones] = listitem;
  1592. format(string, sizeof(string), "%s has set the minimum rank for cones (/deploy cone) to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iCones], arrGroupRanks[iGroupID][arrGroupData[iGroupID][g_iCones]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1593. }
  1594. }
  1595. Log("logs/editgroup.log", string);
  1596. return Group_DisplayDialog(playerid, iGroupID);
  1597. }
  1598. case DIALOG_GROUP_FLARES: {
  1599. new
  1600. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1601. if(response) switch(listitem) {
  1602. case MAX_GROUP_RANKS: {
  1603. arrGroupData[iGroupID][g_iFlares] = INVALID_RANK;
  1604. format(string, sizeof(string), "%s has revoked flares (/deploy flares) from group %d (%s)", GetPlayerNameEx(playerid), iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1605. }
  1606. default: {
  1607. arrGroupData[iGroupID][g_iFlares] = listitem;
  1608. format(string, sizeof(string), "%s has set the minimum rank for flares (/deploy flares) to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iFlares], arrGroupRanks[iGroupID][arrGroupData[iGroupID][g_iFlares]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1609. }
  1610. }
  1611. Log("logs/editgroup.log", string);
  1612. return Group_DisplayDialog(playerid, iGroupID);
  1613. }
  1614. case DIALOG_GROUP_BARRELS: {
  1615. new
  1616. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1617. if(response) switch(listitem) {
  1618. case MAX_GROUP_RANKS: {
  1619. arrGroupData[iGroupID][g_iBarrels] = INVALID_RANK;
  1620. format(string, sizeof(string), "%s has revoked barrels (/deploy barrel) from group %d (%s)", GetPlayerNameEx(playerid), iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1621. }
  1622. default: {
  1623. arrGroupData[iGroupID][g_iBarrels] = listitem;
  1624. format(string, sizeof(string), "%s has set the minimum rank for barrels (/deploy barrel) to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iBarrels], arrGroupRanks[iGroupID][arrGroupData[iGroupID][g_iBarrels]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1625. }
  1626. }
  1627. Log("logs/editgroup.log", string);
  1628. return Group_DisplayDialog(playerid, iGroupID);
  1629. }
  1630. case DIALOG_GROUP_LADDERS: {
  1631. new
  1632. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1633. if(response) switch(listitem) {
  1634. case MAX_GROUP_RANKS: {
  1635. arrGroupData[iGroupID][g_iLadders] = INVALID_RANK;
  1636. format(string, sizeof(string), "%s has revoked ladders (/deploy ladder) from group %d (%s)", GetPlayerNameEx(playerid), iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1637. }
  1638. default: {
  1639. arrGroupData[iGroupID][g_iLadders] = listitem;
  1640. format(string, sizeof(string), "%s has set the minimum rank for ladders (/deploy ladder) to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iLadders], arrGroupRanks[iGroupID][arrGroupData[iGroupID][g_iLadders]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1641. }
  1642. }
  1643. Log("logs/editgroup.log", string);
  1644. return Group_DisplayDialog(playerid, iGroupID);
  1645. }
  1646. case DIALOG_GROUP_TAPES: {
  1647. new
  1648. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1649. if(response) switch(listitem) {
  1650. case MAX_GROUP_RANKS: {
  1651. arrGroupData[iGroupID][g_iTapes] = INVALID_RANK;
  1652. format(string, sizeof(string), "%s has revoked tapes (/deploy tape) from group %d (%s)", GetPlayerNameEx(playerid), iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1653. }
  1654. default: {
  1655. arrGroupData[iGroupID][g_iTapes] = listitem;
  1656. format(string, sizeof(string), "%s has set the minimum rank for tapes (/deploy tape) to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iTapes], arrGroupRanks[iGroupID][arrGroupData[iGroupID][g_iTapes]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1657. }
  1658. }
  1659. Log("logs/editgroup.log", string);
  1660. return Group_DisplayDialog(playerid, iGroupID);
  1661. }
  1662. case DIALOG_GROUP_CRATE: {
  1663. new
  1664. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1665. if(response) switch(listitem) {
  1666. case MAX_GROUP_RANKS: {
  1667. arrGroupData[iGroupID][g_iCrateIsland] = INVALID_RANK;
  1668. format(string, sizeof(string), "%s has revoked Crate Island Control from group %d (%s)", GetPlayerNameEx(playerid), iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1669. }
  1670. default: {
  1671. arrGroupData[iGroupID][g_iCrateIsland] = listitem;
  1672. format(string, sizeof(string), "%s has set the minimum rank for Crate Island Control to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iCrateIsland], arrGroupRanks[iGroupID][arrGroupData[iGroupID][g_iCrateIsland]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  1673. }
  1674. }
  1675. Log("logs/editgroup.log", string);
  1676. return Group_DisplayDialog(playerid, iGroupID);
  1677. }
  1678. case DIALOG_GROUP_DUTYCOL: {
  1679. new
  1680. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1681. if(response) {
  1682. new
  1683. szTitle[32 + GROUP_MAX_NAME_LEN],
  1684. hColour;
  1685. if(strlen(inputtext) > 6 || !ishex(inputtext)) {
  1686. format(szTitle, sizeof szTitle, "Edit Group Duty Color {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1687. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_DUTYCOL, DIALOG_STYLE_INPUT, szTitle, "Invalid value specified.\n\nEnter a colour in hexadecimal format (for example, BCA3FF). This colour will be used to identify the group.", "Confirm", "Cancel");
  1688. }
  1689. sscanf(inputtext, "h", hColour);
  1690. if (hColour == 0xFFFFFF) {
  1691. format(szTitle, sizeof szTitle, "Edit Group Duty Color {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1692. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_DUTYCOL, DIALOG_STYLE_INPUT, szTitle, "You cannot use white as the value.\n\nEnter a colour in hexadecimal format (for example, BCA3FF). This colour will be used to identify the group.", "Confirm", "Cancel");
  1693. }
  1694. arrGroupData[iGroupID][g_hDutyColour] = hColour;
  1695. foreach(new i: Player)
  1696. {
  1697. if (PlayerInfo[i][pMember] == iGroupID) SetPlayerToTeamColor(i);
  1698. }
  1699. format(string, sizeof(string), "%s has set the duty color to %x in %s (%d)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_hDutyColour], arrGroupData[iGroupID][g_szGroupName], iGroupID+1);
  1700. Log("logs/editgroup.log", string);
  1701. }
  1702. return Group_DisplayDialog(playerid, iGroupID);
  1703. }
  1704. case DIALOG_GROUP_RADIOCOL: {
  1705. new
  1706. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1707. if(response) {
  1708. new
  1709. szTitle[32 + GROUP_MAX_NAME_LEN],
  1710. hColour;
  1711. if(strlen(inputtext) > 6 || !ishex(inputtext)) {
  1712. format(szTitle, sizeof szTitle, "Edit Group Radio Color {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1713. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_RADIOCOL, DIALOG_STYLE_INPUT, szTitle, "Invalid value specified.\n\nEnter a colour in hexadecimal format (for example, BCA3FF). This colour will be used for the group's in-character radio chat.", "Confirm", "Cancel");
  1714. }
  1715. sscanf(inputtext, "h", hColour);
  1716. arrGroupData[iGroupID][g_hRadioColour] = hColour;
  1717. format(string, sizeof(string), "%s has set the radio color to %x in %s (%d)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_hRadioColour], arrGroupData[iGroupID][g_szGroupName], iGroupID+1);
  1718. Log("logs/editgroup.log", string);
  1719. }
  1720. return Group_DisplayDialog(playerid, iGroupID);
  1721. }
  1722. case DIALOG_GROUP_EDITSTOCK: {
  1723. new
  1724. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1725. if(response) {
  1726. new
  1727. szTitle[32 + GROUP_MAX_NAME_LEN],
  1728. iValue = strval(inputtext);
  1729. if(isnull(inputtext) || iValue <= -1) {
  1730. format(szTitle, sizeof szTitle, "Edit Group Locker Stock {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1731. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_EDITSTOCK, DIALOG_STYLE_INPUT, szTitle, "Invalid value specified.\n\nSpecify a value. Locker stock is used for weapons, and can be replenished using crates.", "Confirm", "Cancel");
  1732. }
  1733. arrGroupData[iGroupID][g_iLockerStock] = iValue;
  1734. format(string, sizeof(string), "%s has set the locker stock to %d in %s (%d)", GetPlayerNameEx(playerid), strval(inputtext), arrGroupData[iGroupID][g_szGroupName], iGroupID+1);
  1735. Log("logs/editgroup.log", string);
  1736. }
  1737. return Group_DisplayDialog(playerid, iGroupID);
  1738. }
  1739. case DIALOG_GROUP_EDITWEPS: {
  1740. new
  1741. iGroupID = GetPVarInt(playerid, "Group_EditID"),
  1742. szTitle[32 + GROUP_MAX_NAME_LEN];
  1743. if(response) {
  1744. SetPVarInt(playerid, "Group_EditWep", listitem);
  1745. format(szTitle, sizeof szTitle, "Edit Group Weapon (%i) {%s}(%s)", listitem + 1, Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1746. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_EDITWEPID, DIALOG_STYLE_INPUT, szTitle, "Specify a weapon ID (zero to remove this weapon).", "Select", "Cancel");
  1747. }
  1748. else return Group_DisplayDialog(playerid, iGroupID);
  1749. }
  1750. case DIALOG_GROUP_EDITWEPID: {
  1751. new
  1752. szTitle[32 + GROUP_MAX_NAME_LEN],
  1753. iGroupID = GetPVarInt(playerid, "Group_EditID"),
  1754. iWepID = GetPVarInt(playerid, "Group_EditWep");
  1755. format(szTitle, sizeof szTitle, "Edit Group Weapon (%i) {%s}(%s)", iWepID + 1, Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1756. if(response) {
  1757. new
  1758. iValue = strval(inputtext);
  1759. if(isnull(inputtext) || !(0 <= iValue <= 46)) {
  1760. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_EDITWEPID, DIALOG_STYLE_INPUT, szTitle, "Invalid weapon specified.\n\nSpecify a weapon ID (zero to remove this weapon).", "Select", "Cancel");
  1761. }
  1762. for (new i; i < MAX_GROUP_WEAPONS; i++) {
  1763. if (arrGroupData[iGroupID][g_iLockerGuns][i] == iValue && iValue != 0)
  1764. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_EDITWEPID, DIALOG_STYLE_INPUT, szTitle, "This weapon already exists in the locker.\n\nSpecify a weapon ID (zero to remove this weapon).", "Select", "Cancel");
  1765. }
  1766. arrGroupData[iGroupID][g_iLockerGuns][iWepID] = iValue;
  1767. format(string, sizeof(string), "%s has changed the locker weapon (slot %d) to %d (%s) in %s (%d)", GetPlayerNameEx(playerid), iWepID, iValue, Weapon_ReturnName(iValue), arrGroupData[iGroupID][g_szGroupName], iGroupID+1);
  1768. Log("logs/editgroup.log", string);
  1769. if(iValue >= 1) {
  1770. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_EDITCOST, DIALOG_STYLE_INPUT, szTitle, "Specify an (optional) cost for this weapon. This value will be charged in locker stock (or cash, where specified).", "Select", "Back");
  1771. }
  1772. }
  1773. new
  1774. szDialog[(32 + 8) * MAX_GROUP_WEAPONS];
  1775. arrGroupData[iGroupID][g_iLockerCost][iWepID] = 0;
  1776. for(new i = 0; i != MAX_GROUP_WEAPONS; ++i) {
  1777. if(arrGroupData[iGroupID][g_iLockerGuns][i]) format(szDialog, sizeof szDialog, "%s\n(%i) %s (cost: %i)", szDialog, arrGroupData[iGroupID][g_iLockerGuns][i], Weapon_ReturnName(arrGroupData[iGroupID][g_iLockerGuns][i]), arrGroupData[iGroupID][g_iLockerCost][i]);
  1778. else strcat(szDialog, "\n(empty)");
  1779. }
  1780. DeletePVar(playerid, "Group_EditWep");
  1781. format(szTitle, sizeof szTitle, "Edit Group Weapons {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1782. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_EDITWEPS, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1783. }
  1784. case DIALOG_GROUP_EDITCOST: {
  1785. new
  1786. szTitle[32 + GROUP_MAX_NAME_LEN],
  1787. iGroupID = GetPVarInt(playerid, "Group_EditID"),
  1788. iWepID = GetPVarInt(playerid, "Group_EditWep");
  1789. DeletePVar(playerid, "Group_EditWep");
  1790. if(response) {
  1791. new
  1792. iValue = strval(inputtext);
  1793. if(isnull(inputtext) || iValue <= -1) {
  1794. format(szTitle, sizeof szTitle, "Edit Group Weapon (%i) {%s}(%s)", iWepID + 1, Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1795. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_EDITCOST, DIALOG_STYLE_INPUT, szTitle, "Invalid value specified.\n\nSpecify an (optional) cost for this weapon. This value will be charged in locker stock (or cash, where specified).", "Select", "Back");
  1796. }
  1797. arrGroupData[iGroupID][g_iLockerCost][iWepID] = iValue;
  1798. format(string, sizeof(string), "%s has changed the weapon cost to %d in %s (%d)", GetPlayerNameEx(playerid), strval(inputtext));
  1799. Log("logs/editgroup.log", string);
  1800. }
  1801. new
  1802. szDialog[(32 + 8) * MAX_GROUP_WEAPONS];
  1803. for(new i = 0; i != MAX_GROUP_WEAPONS; ++i) {
  1804. if(arrGroupData[iGroupID][g_iLockerGuns][i]) format(szDialog, sizeof szDialog, "%s\n(%i) %s (cost: %i)", szDialog, arrGroupData[iGroupID][g_iLockerGuns][i], Weapon_ReturnName(arrGroupData[iGroupID][g_iLockerGuns][i]), arrGroupData[iGroupID][g_iLockerCost][i]);
  1805. else strcat(szDialog, "\n(empty)");
  1806. }
  1807. format(szTitle, sizeof szTitle, "Edit Group Weapons {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1808. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_EDITWEPS, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1809. }
  1810. case DIALOG_GROUP_EDITDIVS: {
  1811. new
  1812. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1813. if(response) {
  1814. new
  1815. szTitle[32 + GROUP_MAX_NAME_LEN];
  1816. SetPVarInt(playerid, "Group_EditDiv", listitem);
  1817. format(szTitle, sizeof szTitle, "Edit Group Division (%i) {%s}(%s)", listitem + 1, Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1818. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_EDITDIV, DIALOG_STYLE_INPUT, szTitle, "Specify a division name (or none to disable it).", "Confirm", "Cancel");
  1819. }
  1820. return Group_DisplayDialog(playerid, iGroupID);
  1821. }
  1822. case DIALOG_GROUP_EDITDIV: {
  1823. new
  1824. iGroupID = GetPVarInt(playerid, "Group_EditID"),
  1825. iDivID = GetPVarInt(playerid, "Group_EditDiv"),
  1826. szTitle[32 + GROUP_MAX_NAME_LEN];
  1827. if(response) {
  1828. if(strlen(inputtext) >= GROUP_MAX_DIV_LEN) {
  1829. format(szTitle, sizeof szTitle, "Edit Group Division (%i) {%s}(%s)", iDivID + 1, Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1830. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_EDITDIV, DIALOG_STYLE_INPUT, szTitle, "The specified name must be less than "#GROUP_MAX_DIV_LEN" characters in length.\n\nSpecify a division name (or none to disable it).", "Confirm", "Cancel");
  1831. }
  1832. arrGroupDivisions[iGroupID][iDivID][0] = 0;
  1833. if(!isnull(inputtext)) mysql_escape_string(inputtext, arrGroupDivisions[iGroupID][iDivID]);
  1834. }
  1835. new
  1836. szDialog[(GROUP_MAX_DIV_LEN + 8) * MAX_GROUP_DIVS];
  1837. for(new i = 0; i != MAX_GROUP_DIVS; ++i) {
  1838. format(szDialog, sizeof szDialog, "%s\n(%i) %s", szDialog, i + 1, ((arrGroupDivisions[iGroupID][i][0]) ? (arrGroupDivisions[iGroupID][i]) : ("{AAAAAA}(undefined){FFFFFF}")));
  1839. }
  1840. format(szTitle, sizeof szTitle, "Edit Group Divisions {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1841. ShowPlayerDialogEx(playerid, DIALOG_GROUP_EDITDIVS, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1842. DeletePVar(playerid, "Group_EditDiv");
  1843. }
  1844. case DIALOG_GROUP_LOCKERS: {
  1845. new
  1846. iGroupID = GetPVarInt(playerid, "Group_EditID"),
  1847. szTitle[32 + GROUP_MAX_NAME_LEN];
  1848. if(response)
  1849. {
  1850. format(szTitle, sizeof szTitle, "Edit Group Locker Position {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1851. if (listitem == MAX_GROUP_LOCKERS)
  1852. {
  1853. ShowPlayerDialogEx(playerid, DIALOG_GROUP_LOCKERDELETECONF, DIALOG_STYLE_MSGBOX, szTitle, "{FFFFFF}Are you sure you want to delete ALL of the lockers for this group?", "Cancel", "Confirm");
  1854. return 1;
  1855. }
  1856. else
  1857. {
  1858. SetPVarInt(playerid, "Group_EditLocker", listitem);
  1859. ShowPlayerDialogEx(playerid, DIALOG_GROUP_LOCKERACTION, DIALOG_STYLE_LIST, szTitle, "Go to Locker\nMove Locker (to your current position)\nDelete Locker", "Select", "Cancel");
  1860. return 1;
  1861. }
  1862. }
  1863. return Group_DisplayDialog(playerid, iGroupID);
  1864. }
  1865. case DIALOG_GROUP_LOCKERACTION: {
  1866. new
  1867. iGroupID = GetPVarInt(playerid, "Group_EditID"),
  1868. iLocker = GetPVarInt(playerid, "Group_EditLocker");
  1869. if(response)
  1870. {
  1871. if (listitem == 0)
  1872. {
  1873. Player_StreamPrep(playerid, arrGroupLockers[iGroupID][iLocker][g_fLockerPos][0], arrGroupLockers[iGroupID][iLocker][g_fLockerPos][1], arrGroupLockers[iGroupID][iLocker][g_fLockerPos][2], FREEZE_TIME);
  1874. SetPlayerVirtualWorld(playerid, arrGroupLockers[iGroupID][iLocker][g_iLockerVW]);
  1875. }
  1876. if (listitem == 1)
  1877. {
  1878. GetPlayerPos(playerid, arrGroupLockers[iGroupID][iLocker][g_fLockerPos][0], arrGroupLockers[iGroupID][iLocker][g_fLockerPos][1], arrGroupLockers[iGroupID][iLocker][g_fLockerPos][2]);
  1879. arrGroupLockers[iGroupID][iLocker][g_iLockerVW] = GetPlayerVirtualWorld(playerid);
  1880. DestroyDynamic3DTextLabel(arrGroupLockers[iGroupID][iLocker][g_tLocker3DLabel]);
  1881. DestroyDynamicArea(arrGroupLockers[iGroupID][iLocker][g_iLockerAreaID]);
  1882. format(szMiscArray, sizeof szMiscArray, "%s Locker\n{1FBDFF}Press ~k~~CONVERSATION_YES~ {FFFF00} to use\n ID: %i", arrGroupData[iGroupID][g_szGroupName], arrGroupLockers[iGroupID][iLocker]);
  1883. arrGroupLockers[iGroupID][iLocker][g_tLocker3DLabel] = CreateDynamic3DTextLabel(szMiscArray, arrGroupData[iGroupID][g_hDutyColour] * 256 + 0xFF, arrGroupLockers[iGroupID][iLocker][g_fLockerPos][0], arrGroupLockers[iGroupID][iLocker][g_fLockerPos][1], arrGroupLockers[iGroupID][iLocker][g_fLockerPos][2], 15.0, .testlos = 1, .worldid = arrGroupLockers[iGroupID][iLocker][g_iLockerVW]);
  1884. arrGroupLockers[iGroupID][iLocker][g_iLockerAreaID] = CreateDynamicSphere(arrGroupLockers[iGroupID][iLocker][g_fLockerPos][0], arrGroupLockers[iGroupID][iLocker][g_fLockerPos][1], arrGroupLockers[iGroupID][iLocker][g_fLockerPos][2], 3.0, .worldid = arrGroupLockers[iGroupID][iLocker][g_iLockerVW]);
  1885. // Streamer_SetIntData(STREAMER_TYPE_AREA, arrGroupLockers[iGroupID][iLocker][g_iLockerAreaID], E_STREAMER_EXTRA_ID, iLocker);
  1886. }
  1887. else if (listitem == 2)
  1888. {
  1889. arrGroupLockers[iGroupID][iLocker][g_fLockerPos][0] = 0;
  1890. arrGroupLockers[iGroupID][iLocker][g_fLockerPos][1] = 0;
  1891. arrGroupLockers[iGroupID][iLocker][g_fLockerPos][2] = 0;
  1892. arrGroupLockers[iGroupID][iLocker][g_iLockerVW] = 0;
  1893. DestroyDynamic3DTextLabel(arrGroupLockers[iGroupID][iLocker][g_tLocker3DLabel]);
  1894. format(string, sizeof(string), "You have deleted locker %d of %s", iLocker, arrGroupData[iGroupID][g_szGroupName]);
  1895. SendClientMessageEx(playerid, COLOR_WHITE, string);
  1896. }
  1897. }
  1898. return Group_DisplayDialog(playerid, iGroupID);
  1899. }
  1900. case DIALOG_GROUP_LISTPAY: {
  1901. new
  1902. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1903. if(response) {
  1904. new
  1905. szTitle[32 + GROUP_MAX_NAME_LEN];
  1906. SetPVarInt(playerid, "Group_EditRank", listitem);
  1907. format(szTitle, sizeof szTitle, "Edit Group Rank (%i) {%s}(%s)", listitem, Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1908. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_EDITPAY, DIALOG_STYLE_INPUT, szTitle, "Specify a paycheck amount for this rank.", "OK", "Cancel");
  1909. }
  1910. return Group_DisplayDialog(playerid, iGroupID);
  1911. }
  1912. case DIALOG_GROUP_EDITPAY: {
  1913. new
  1914. iGroupID = GetPVarInt(playerid, "Group_EditID"),
  1915. iRankID = GetPVarInt(playerid, "Group_EditRank");
  1916. if(response) {
  1917. new szTitle[128];
  1918. arrGroupData[iGroupID][g_iPaycheck][iRankID] = strval(inputtext);
  1919. new
  1920. szDialog[(GROUP_MAX_RANK_LEN + 8) * MAX_GROUP_RANKS];
  1921. for(new i = 0; i != MAX_GROUP_RANKS; ++i) {
  1922. format(szDialog, sizeof szDialog, "%s\nRank %i (%s): $%s", szDialog, i, arrGroupRanks[iGroupID][i], number_format(arrGroupData[iGroupID][g_iPaycheck][i]));
  1923. }
  1924. format(szTitle, sizeof szTitle, "Edit Group Paychecks {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1925. ShowPlayerDialogEx(playerid, DIALOG_GROUP_LISTPAY, DIALOG_STYLE_LIST, szTitle, szDialog, "Edit", "Cancel");
  1926. format(string, sizeof(string), "%s has changed the paycheck for rank %d (%s) to $%d in %s (%d)", GetPlayerNameEx(playerid), iRankID, arrGroupRanks[iGroupID][iRankID], strval(inputtext), iGroupID + 1);
  1927. Log("logs/editgroup.log", string);
  1928. return 1;
  1929. }
  1930. return Group_DisplayDialog(playerid, iGroupID);
  1931. }
  1932. case DIALOG_GROUP_EDITRANKS: {
  1933. new
  1934. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1935. if(response) {
  1936. new
  1937. szTitle[32 + GROUP_MAX_NAME_LEN];
  1938. SetPVarInt(playerid, "Group_EditRank", listitem);
  1939. format(szTitle, sizeof szTitle, "Edit Group Rank (%i) {%s}(%s)", listitem + 1, Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1940. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_EDITRANK, DIALOG_STYLE_INPUT, szTitle, "Specify a rank name (or none to disable it).", "Confirm", "Cancel");
  1941. }
  1942. return Group_DisplayDialog(playerid, iGroupID);
  1943. }
  1944. case DIALOG_GROUP_EDITRANK: {
  1945. new
  1946. iGroupID = GetPVarInt(playerid, "Group_EditID"),
  1947. iRankID = GetPVarInt(playerid, "Group_EditRank"),
  1948. szTitle[32 + GROUP_MAX_NAME_LEN];
  1949. if(response) {
  1950. if(strlen(inputtext) >= GROUP_MAX_RANK_LEN) {
  1951. format(szTitle, sizeof szTitle, "Edit Group Rank (%i) {%s}(%s)", iRankID + 1, Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1952. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_EDITRANK, DIALOG_STYLE_INPUT, szTitle, "The specified name must be less than "#GROUP_MAX_RANK_LEN" characters in length.\n\nSpecify a rank name (or none to disable it).", "Confirm", "Cancel");
  1953. }
  1954. arrGroupRanks[iGroupID][iRankID][0] = 0;
  1955. if(!isnull(inputtext)) mysql_escape_string(inputtext, arrGroupRanks[iGroupID][iRankID]);
  1956. }
  1957. new
  1958. szDialog[(GROUP_MAX_RANK_LEN + 8) * MAX_GROUP_RANKS];
  1959. for(new i = 0; i != MAX_GROUP_RANKS; ++i) {
  1960. format(szDialog, sizeof szDialog, "%s\n(%i) %s", szDialog, i + 1, ((arrGroupRanks[iGroupID][i][0]) ? (arrGroupRanks[iGroupID][i]) : ("{BBBBBB}(undefined){FFFFFF}")));
  1961. }
  1962. format(szTitle, sizeof szTitle, "Edit Group Ranks {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  1963. ShowPlayerDialogEx(playerid, DIALOG_GROUP_EDITRANKS, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  1964. DeletePVar(playerid, "Group_EditRank");
  1965. }
  1966. case DIALOG_GROUP_CRATEPOS: {
  1967. new
  1968. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1969. if(!response) {
  1970. new
  1971. szText[84];
  1972. GetPlayerPos(playerid, arrGroupData[iGroupID][g_fCratePos][0], arrGroupData[iGroupID][g_fCratePos][1], arrGroupData[iGroupID][g_fCratePos][2]);
  1973. DestroyDynamic3DTextLabel(arrGroupData[iGroupID][g_tCrate3DLabel]);
  1974. if(arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_CRIMINAL)
  1975. {
  1976. format(szText, sizeof(szText), "%s Shipment Delivery Point\n{1FBDFF}/gdelivercrate", arrGroupData[iGroupID][g_szGroupName]);
  1977. }
  1978. else
  1979. {
  1980. format(szText, sizeof szText, "%s Crate Delivery Point\n{1FBDFF}/delivercrate", arrGroupData[iGroupID][g_szGroupName]);
  1981. }
  1982. arrGroupData[iGroupID][g_tCrate3DLabel] = CreateDynamic3DTextLabel(szText, arrGroupData[iGroupID][g_hDutyColour] * 256 + 0xFF, arrGroupData[iGroupID][g_fCratePos][0], arrGroupData[iGroupID][g_fCratePos][1], arrGroupData[iGroupID][g_fCratePos][2], 10.0, .testlos = 1, .streamdistance = 20.0);
  1983. format(string, sizeof(string), "%s has changed the crate/shipment position to X:%f, Y:%f, Z:%f in %s (%d)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_fCratePos][0], arrGroupData[iGroupID][g_fCratePos][1], arrGroupData[iGroupID][g_fCratePos][2], arrGroupData[iGroupID][g_szGroupName], iGroupID+1);
  1984. Log("logs/editgroup.log", string);
  1985. }
  1986. return Group_DisplayDialog(playerid, iGroupID);
  1987. }
  1988. case DIALOG_GROUP_COSTTYPE: {
  1989. new
  1990. iGroupID = GetPVarInt(playerid, "Group_EditID");
  1991. if(response) {
  1992. format(string, sizeof(string), "%s has changed the locker cost type to %s in %s (%d)", GetPlayerNameEx(playerid), inputtext, arrGroupData[iGroupID][g_szGroupName], iGroupID+1);
  1993. Log("logs/editgroup.log", string);
  1994. arrGroupData[iGroupID][g_iLockerCostType] = listitem;
  1995. }
  1996. return Group_DisplayDialog(playerid, iGroupID);
  1997. }
  1998. case DIALOG_GROUP_DISBAND: {
  1999. if(!response && PlayerInfo[playerid][pAdmin] >= 1337) {
  2000. new
  2001. iGroupID = GetPVarInt(playerid, "Group_EditID");
  2002. format(string, sizeof(string), "%s has disbanded %s (%d)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_szGroupName], iGroupID+1);
  2003. Log("logs/editgroup.log", string);
  2004. Group_DisbandGroup(iGroupID);
  2005. }
  2006. return Group_ListGroups(playerid);
  2007. }
  2008. case DIALOG_GROUP_LOCKERDELETECONF: {
  2009. if(!response) {
  2010. new
  2011. iGroupID = GetPVarInt(playerid, "Group_EditID");
  2012. for (new i; i < MAX_GROUP_LOCKERS; i++)
  2013. {
  2014. arrGroupLockers[iGroupID][i][g_fLockerPos][0] = 0;
  2015. arrGroupLockers[iGroupID][i][g_fLockerPos][1] = 0;
  2016. arrGroupLockers[iGroupID][i][g_fLockerPos][2] = 0;
  2017. DestroyDynamic3DTextLabel(arrGroupLockers[iGroupID][i][g_tLocker3DLabel]);
  2018. }
  2019. SendClientMessage(playerid, COLOR_WHITE, "You have deleted all lockers of this group.");
  2020. format(string, sizeof(string), "%s has deleted all lockers of %s", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_szGroupName]);
  2021. Log("logs/editgroup.log", string);
  2022. }
  2023. return Group_ListGroups(playerid);
  2024. }
  2025. case DIALOG_GROUP_JURISDICTION_ADD: {
  2026. SetPVarInt(playerid, "Group_EditID", listitem);
  2027. new iGroupID = GetPVarInt(playerid, "Group_EditID");
  2028. if(response)
  2029. {
  2030. if(arrGroupData[iGroupID][g_iJCount] >= MAX_GROUP_JURISDICTIONS) return SendClientMessage(playerid, COLOR_GRAD2, "Error: Cannot add anymore jurisdictions.");
  2031. new szTitle[128], szDialog[2500];
  2032. for(new i = 0; i < 161; ++i)
  2033. {
  2034. strcat(szDialog, "\n"), strcat(szDialog, AreaName[i]);
  2035. }
  2036. format(szTitle, sizeof szTitle, "Add Group Jurisdiction {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  2037. ShowPlayerDialogEx(playerid, DIALOG_GROUP_JURISDICTION_ADD2, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Go Back");
  2038. }
  2039. else return Group_DisplayDialog(playerid, iGroupID);
  2040. }
  2041. case DIALOG_GROUP_JURISDICTION_ADD2: {
  2042. new iGroupID = GetPVarInt(playerid, "Group_EditID");
  2043. if(response)
  2044. {
  2045. new query[256];
  2046. mysql_format(MainPipeline, query, sizeof(query), "INSERT INTO `jurisdictions` (`id`, `GroupID`, `JurisdictionID`, `AreaName`) VALUES (NULL, %d, %d, '%s')", iGroupID, listitem,AreaName[listitem]);
  2047. mysql_tquery(MainPipeline, query, "OnQueryFinish", "i", SENDDATA_THREAD);
  2048. mysql_tquery(MainPipeline, "SELECT * FROM `jurisdictions`", "Group_QueryFinish", "ii", GROUP_QUERY_JURISDICTIONS, 0);
  2049. format(string, sizeof(string), "You have successfully assigned %s to %s.", AreaName[listitem], arrGroupData[iGroupID][g_szGroupName]);
  2050. SendClientMessage(playerid, COLOR_WHITE, string);
  2051. format(string, sizeof(string), "%s has assigned %s to %s", GetPlayerNameEx(playerid), AreaName[listitem], arrGroupData[iGroupID][g_szGroupName]);
  2052. Log("logs/editgroup.log", string);
  2053. }
  2054. else return Group_DisplayDialog(playerid, iGroupID);
  2055. }
  2056. case DIALOG_GROUP_GARAGEPOS: {
  2057. new
  2058. iGroupID = GetPVarInt(playerid, "Group_EditID");
  2059. if(!response) {
  2060. GetPlayerPos(playerid, arrGroupData[iGroupID][g_fGaragePos][0], arrGroupData[iGroupID][g_fGaragePos][1], arrGroupData[iGroupID][g_fGaragePos][2]);
  2061. SendClientMessageEx(playerid, COLOR_WHITE, "You've changed the garage position to your current location.");
  2062. format(string, sizeof(string), "%s has changed the garage position to X:%f, Y:%f, Z:%f in %s (%d)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_fGaragePos][0], arrGroupData[iGroupID][g_fGaragePos][1], arrGroupData[iGroupID][g_fGaragePos][2], arrGroupData[iGroupID][g_szGroupName], iGroupID+1);
  2063. Log("logs/editgroup.log", string);
  2064. }
  2065. return Group_DisplayDialog(playerid, iGroupID);
  2066. }
  2067. case DIALOG_GROUP_TACKLEACCESS: {
  2068. new
  2069. iGroupID = GetPVarInt(playerid, "Group_EditID");
  2070. if(response) switch(listitem) {
  2071. case MAX_GROUP_RANKS: {
  2072. arrGroupData[iGroupID][g_iTackleAccess] = INVALID_RANK;
  2073. format(string, sizeof(string), "%s has revoked tackle (/tackle) from group %d (%s)", GetPlayerNameEx(playerid), iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  2074. }
  2075. default: {
  2076. arrGroupData[iGroupID][g_iTackleAccess] = listitem;
  2077. format(string, sizeof(string), "%s has set the minimum rank for tackle (/tackle) to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iTackleAccess], arrGroupRanks[iGroupID][arrGroupData[iGroupID][g_iTackleAccess]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  2078. }
  2079. }
  2080. Log("logs/editgroup.log", string);
  2081. return Group_DisplayDialog(playerid, iGroupID);
  2082. }
  2083. case DIALOG_GROUP_WHEELCLAMPS: {
  2084. new
  2085. iGroupID = GetPVarInt(playerid, "Group_EditID");
  2086. if(response) switch(listitem) {
  2087. case MAX_GROUP_RANKS: {
  2088. arrGroupData[iGroupID][g_iWheelClamps] = INVALID_RANK;
  2089. format(string, sizeof(string), "%s has set the minimum rank for wheel clamps (/wheelclamp) to %d (Disabled) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iWheelClamps], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  2090. Log("logs/editgroup.log", string);
  2091. }
  2092. default: {
  2093. arrGroupData[iGroupID][g_iWheelClamps] = listitem;
  2094. format(string, sizeof(string), "%s has set the minimum rank for wheel clamps (/wheelclamp) to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iWheelClamps], arrGroupRanks[iGroupID][arrGroupData[iGroupID][g_iWheelClamps]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  2095. Log("logs/editgroup.log", string);
  2096. }
  2097. }
  2098. return Group_DisplayDialog(playerid, iGroupID);
  2099. }
  2100. case DIALOG_GROUP_DOCACCESS: {
  2101. new
  2102. iGroupID = GetPVarInt(playerid, "Group_EditID");
  2103. if(response) switch(listitem) {
  2104. case MAX_GROUP_RANKS: {
  2105. arrGroupData[iGroupID][g_iDoCAccess] = INVALID_RANK;
  2106. format(string, sizeof(string), "%s has set the minimum rank for DoC Access to %d (Disabled) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iDoCAccess], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  2107. Log("logs/editgroup.log", string);
  2108. }
  2109. default: {
  2110. arrGroupData[iGroupID][g_iDoCAccess] = listitem;
  2111. format(string, sizeof(string), "%s has set the minimum rank for DoC Access to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iDoCAccess], arrGroupRanks[iGroupID][arrGroupData[iGroupID][g_iDoCAccess]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  2112. Log("logs/editgroup.log", string);
  2113. }
  2114. }
  2115. return Group_DisplayDialog(playerid, iGroupID);
  2116. }
  2117. case DIALOG_GROUP_MEDICACCESS: {
  2118. new
  2119. iGroupID = GetPVarInt(playerid, "Group_EditID");
  2120. if(response) switch(listitem) {
  2121. case MAX_GROUP_DIVS: {
  2122. if(arrGroupData[iGroupID][g_iMedicAccess] == INVALID_DIVISION) return 1;
  2123. format(string, sizeof(string), "%s has revoked Medic Access from division %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iMedicAccess], arrGroupDivisions[iGroupID][arrGroupData[iGroupID][g_iMedicAccess]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  2124. Log("logs/editgroup.log", string);
  2125. arrGroupData[iGroupID][g_iMedicAccess] = INVALID_DIVISION;
  2126. }
  2127. default: {
  2128. arrGroupData[iGroupID][g_iMedicAccess] = listitem;
  2129. format(string, sizeof(string), "%s has set the division for Medic Access to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iMedicAccess], arrGroupDivisions[iGroupID][arrGroupData[iGroupID][g_iMedicAccess]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  2130. Log("logs/editgroup.log", string);
  2131. }
  2132. }
  2133. return Group_DisplayDialog(playerid, iGroupID);
  2134. }
  2135. case DIALOG_GROUP_DMVACCESS: {
  2136. new
  2137. iGroupID = GetPVarInt(playerid, "Group_EditID");
  2138. if(response) switch(listitem) {
  2139. case MAX_GROUP_RANKS: {
  2140. arrGroupData[iGroupID][g_iDMVAccess] = INVALID_RANK;
  2141. format(string, sizeof(string), "%s has set the minimum rank for DMV Access to %d (Disabled) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iDMVAccess], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  2142. Log("logs/editgroup.log", string);
  2143. }
  2144. default: {
  2145. arrGroupData[iGroupID][g_iDMVAccess] = listitem;
  2146. format(string, sizeof(string), "%s has set the minimum rank for DMV Access to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iDMVAccess], arrGroupRanks[iGroupID][arrGroupData[iGroupID][g_iDMVAccess]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  2147. Log("logs/editgroup.log", string);
  2148. }
  2149. }
  2150. return Group_DisplayDialog(playerid, iGroupID);
  2151. }
  2152. case DIALOG_GROUP_TEMPNUMACCESS: {
  2153. new
  2154. iGroupID = GetPVarInt(playerid, "Group_EditID");
  2155. if(response) switch(listitem) {
  2156. case MAX_GROUP_RANKS: {
  2157. arrGroupData[iGroupID][gTempNum] = INVALID_RANK;
  2158. format(string, sizeof(string), "%s has set the minimum rank for Temporary Number Access to %d (Disabled) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][gTempNum], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  2159. Log("logs/editgroup.log", string);
  2160. }
  2161. default: {
  2162. arrGroupData[iGroupID][gTempNum] = listitem;
  2163. format(string, sizeof(string), "%s has set the minimum rank for Temporary Number Access to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][gTempNum], arrGroupRanks[iGroupID][arrGroupData[iGroupID][gTempNum]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  2164. Log("logs/editgroup.log", string);
  2165. }
  2166. }
  2167. return Group_DisplayDialog(playerid, iGroupID);
  2168. }
  2169. case DIALOG_GROUP_LEOARRESTACCESS: {
  2170. new
  2171. iGroupID = GetPVarInt(playerid, "Group_EditID");
  2172. if(response) switch(listitem) {
  2173. case MAX_GROUP_RANKS: {
  2174. arrGroupData[iGroupID][gLEOArrest] = INVALID_RANK;
  2175. format(string, sizeof(string), "%s has set the minimum rank for LEO Arrest Access to %d (Disabled) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][gLEOArrest], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  2176. Log("logs/editgroup.log", string);
  2177. }
  2178. default: {
  2179. arrGroupData[iGroupID][gLEOArrest] = listitem;
  2180. format(string, sizeof(string), "%s has set the minimum rank for LEO Arrest Access to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][gLEOArrest], arrGroupRanks[iGroupID][arrGroupData[iGroupID][gLEOArrest]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  2181. Log("logs/editgroup.log", string);
  2182. }
  2183. }
  2184. return Group_DisplayDialog(playerid, iGroupID);
  2185. }
  2186. case DIALOG_GROUP_OOCCHAT: {
  2187. new
  2188. iGroupID = GetPVarInt(playerid, "Group_EditID");
  2189. if(response) switch(listitem) {
  2190. case MAX_GROUP_RANKS: {
  2191. arrGroupData[iGroupID][g_iOOCChat] = INVALID_RANK;
  2192. format(string, sizeof(string), "%s has set the minimum rank for OOC Chat Access to %d (Disabled) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iOOCChat], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  2193. Log("logs/editgroup.log", string);
  2194. }
  2195. default: {
  2196. arrGroupData[iGroupID][g_iOOCChat] = listitem;
  2197. format(string, sizeof(string), "%s has set the minimum rank for OOC Chat Access to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iOOCChat], arrGroupRanks[iGroupID][arrGroupData[iGroupID][g_iOOCChat]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  2198. Log("logs/editgroup.log", string);
  2199. }
  2200. }
  2201. return Group_DisplayDialog(playerid, iGroupID);
  2202. }
  2203. case DIALOG_GROUP_OOCCOLOR: {
  2204. new
  2205. iGroupID = GetPVarInt(playerid, "Group_EditID");
  2206. if(response) {
  2207. new
  2208. szTitle[32 + GROUP_MAX_NAME_LEN],
  2209. hColour;
  2210. if(strlen(inputtext) > 6 || !ishex(inputtext)) {
  2211. format(szTitle, sizeof szTitle, "Edit Group OOC Chat Color {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  2212. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_RADIOCOL, DIALOG_STYLE_INPUT, szTitle, "Invalid value specified.\n\nEnter a color in hexadecimal format (for example, BCA3FF). This color will be that of their OOC Chat.", "Confirm", "Cancel");
  2213. }
  2214. sscanf(inputtext, "h", hColour);
  2215. arrGroupData[iGroupID][g_hOOCColor] = hColour;
  2216. format(string, sizeof(string), "%s has set the OOC Chat color to %x in %s (%d)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_hOOCColor], arrGroupData[iGroupID][g_szGroupName], iGroupID+1);
  2217. Log("logs/editgroup.log", string);
  2218. }
  2219. return Group_DisplayDialog(playerid, iGroupID);
  2220. }
  2221. case DIALOG_GROUP_LISTCLOTHES: {
  2222. new
  2223. iGroupID = GetPVarInt(playerid, "Group_EditID");
  2224. if(response) {
  2225. new
  2226. szTitle[32 + GROUP_MAX_NAME_LEN];
  2227. SetPVarInt(playerid, "Group_EditRank", listitem);
  2228. format(szTitle, sizeof szTitle, "Edit Group Rank (%i) {%s}(%s)", listitem, Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  2229. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_EDITCLOTHES, DIALOG_STYLE_INPUT, szTitle, "Specify a skin ID for this rank.", "OK", "Cancel");
  2230. }
  2231. return Group_DisplayDialog(playerid, iGroupID);
  2232. }
  2233. case DIALOG_GROUP_EDITCLOTHES: {
  2234. new
  2235. iGroupID = GetPVarInt(playerid, "Group_EditID"),
  2236. iRankID = GetPVarInt(playerid, "Group_EditRank");
  2237. if(response) {
  2238. new szTitle[128];
  2239. arrGroupData[iGroupID][g_iClothes][iRankID] = strval(inputtext);
  2240. new
  2241. szDialog[(GROUP_MAX_RANK_LEN + 8) * MAX_GROUP_RANKS];
  2242. for(new i = 0; i != MAX_GROUP_RANKS; ++i) {
  2243. format(szDialog, sizeof szDialog, "%s\nRank %i (%s): Skin ID:%i", szDialog, i, arrGroupRanks[iGroupID][i], arrGroupData[iGroupID][g_iClothes][i]);
  2244. }
  2245. format(szTitle, sizeof szTitle, "Edit Group Clothes {%s}(%s)", Group_NumToDialogHex(arrGroupData[iGroupID][g_hDutyColour]), arrGroupData[iGroupID][g_szGroupName]);
  2246. ShowPlayerDialogEx(playerid, DIALOG_GROUP_LISTCLOTHES, DIALOG_STYLE_LIST, szTitle, szDialog, "Edit", "Cancel");
  2247. format(string, sizeof(string), "%s has changed the skin ID for rank %d (%s) to $%d in %s (%d)", GetPlayerNameEx(playerid), iRankID, arrGroupRanks[iGroupID][iRankID], strval(inputtext), iGroupID + 1);
  2248. Log("logs/editgroup.log", string);
  2249. return 1;
  2250. }
  2251. return Group_DisplayDialog(playerid, iGroupID);
  2252. }
  2253. case DIALOG_GROUP_TURFCAP: {
  2254. new
  2255. iGroupID = GetPVarInt(playerid, "Group_EditID");
  2256. if(response) switch(listitem) {
  2257. case MAX_GROUP_RANKS: {
  2258. arrGroupData[iGroupID][g_iTurfCapRank] = INVALID_RANK;
  2259. format(string, sizeof(string), "%s has set the minimum rank for turf capping to %d (Disabled) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iTurfCapRank], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  2260. Log("logs/editgroup.log", string);
  2261. }
  2262. default: {
  2263. arrGroupData[iGroupID][g_iTurfCapRank] = listitem;
  2264. format(string, sizeof(string), "%s has set the minimum rank for turf capping to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iTurfCapRank], arrGroupRanks[iGroupID][arrGroupData[iGroupID][g_iTurfCapRank]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  2265. Log("logs/editgroup.log", string);
  2266. }
  2267. }
  2268. return Group_DisplayDialog(playerid, iGroupID);
  2269. }
  2270. case DIALOG_GROUP_POINTCAP: {
  2271. new
  2272. iGroupID = GetPVarInt(playerid, "Group_EditID");
  2273. if(response) switch(listitem) {
  2274. case MAX_GROUP_RANKS: {
  2275. arrGroupData[iGroupID][g_iPointCapRank] = INVALID_RANK;
  2276. format(string, sizeof(string), "%s has set the minimum rank for point capping to %d (Disabled) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iPointCapRank], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  2277. Log("logs/editgroup.log", string);
  2278. }
  2279. default: {
  2280. arrGroupData[iGroupID][g_iPointCapRank] = listitem;
  2281. format(string, sizeof(string), "%s has set the minimum rank for point capping to %d (%s) in group %d (%s)", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_iPointCapRank], arrGroupRanks[iGroupID][arrGroupData[iGroupID][g_iPointCapRank]], iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  2282. Log("logs/editgroup.log", string);
  2283. }
  2284. }
  2285. return Group_DisplayDialog(playerid, iGroupID);
  2286. }
  2287. case DIALOG_GROUP_CRIMETYPE:
  2288. {
  2289. new iGroupID = GetPVarInt(playerid, "Group_EditID");
  2290. if(response) {
  2291. arrGroupData[iGroupID][g_iCrimeType] = listitem;
  2292. format(string, sizeof(string), "%s has set the crime group type to %s in group %d (%s)", GetPlayerNameEx(playerid), ReturnCrimeGroupType(listitem), iGroupID+1, arrGroupData[iGroupID][g_szGroupName]);
  2293. Log("logs/editgroup.log", string);
  2294. }
  2295. }
  2296. case G_LOCKER_DRUGS: {
  2297. if(!response) return DeletePVar(playerid, "GSafe_Opt"), cmd_locker(playerid, "");
  2298. else {
  2299. SetPVarInt(playerid, "GLocker_SID", listitem);
  2300. format(szMiscArray, sizeof(szMiscArray), "Gang Safe | Editing: {FFFF00}%s", Drugs[listitem]);
  2301. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_SACTIONTYPE, DIALOG_STYLE_LIST, szMiscArray, "Deposit\nWithdraw", "Select", "Back");
  2302. }
  2303. }
  2304. /*case G_LOCKER_INGREDIENTS: {
  2305. if(!response) return DeletePVar(playerid, "GSafe_Opt"), cmd_locker(playerid, "");
  2306. else {
  2307. SetPVarInt(playerid, "GLocker_SID", listitem);
  2308. format(szMiscArray, sizeof(szMiscArray), "Gang Safe | Editing: {FFFF00}%s", szIngredients[listitem]);
  2309. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_SACTIONTYPE, DIALOG_STYLE_LIST, szMiscArray, "Deposit\nWithdraw", "Select", "Back");
  2310. }
  2311. }*/
  2312. case DIALOG_GROUP_SACTIONTYPE:
  2313. {
  2314. if(!response)
  2315. {
  2316. return cmd_locker(playerid, "");
  2317. }
  2318. switch(listitem)
  2319. {
  2320. case 0:
  2321. {
  2322. SetPVarInt(playerid, "GSafe_Action", 1);
  2323. format(szMiscArray, sizeof(szMiscArray), "Please type an amount to deposit.");
  2324. }
  2325. case 1:
  2326. {
  2327. new iTemp = GetPVarInt(playerid, "GSafe_Opt");
  2328. if(PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iWithdrawRank][GetSafeTakePerm(iTemp)])
  2329. {
  2330. SetPVarInt(playerid, "GSafe_Action", 2);
  2331. format(szMiscArray, sizeof(szMiscArray), "Please type an amount to withdraw.");
  2332. }
  2333. else
  2334. {
  2335. DeletePVar(playerid, "GSafe_Opt");
  2336. return SendClientMessageEx(playerid, COLOR_GREY, "You are not authorized to withdraw from the locker.");
  2337. }
  2338. }
  2339. }
  2340. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_SACTIONEXEC, DIALOG_STYLE_INPUT, "Gang Safe", szMiscArray, "Input", "Cancel");
  2341. }
  2342. case DIALOG_GROUP_SACTIONEXEC:
  2343. {
  2344. new iGroupID = PlayerInfo[playerid][pMember];
  2345. if(!response)
  2346. {
  2347. DeletePVar(playerid, "GSafe_Action");
  2348. DeletePVar(playerid, "GSafe_Opt");
  2349. return cmd_locker(playerid, "");
  2350. }
  2351. if(response)
  2352. {
  2353. if(strval(inputtext) <= 0) return ShowPlayerDialogEx(playerid, DIALOG_GROUP_SACTIONEXEC, DIALOG_STYLE_INPUT, "Gang Safe", "The amount cannot be less than or 0.", "Input", "Cancel");
  2354. switch(GetPVarInt(playerid, "GSafe_Opt")) {
  2355. case 0:
  2356. {
  2357. new amount = strval(inputtext);
  2358. switch(GetPVarInt(playerid, "GSafe_Action"))
  2359. {
  2360. case 1:
  2361. {
  2362. if(strval(inputtext) <= GetPlayerCash(playerid))
  2363. {
  2364. arrGroupData[iGroupID][g_iBudget] += strval(inputtext);
  2365. GivePlayerCash( playerid, -amount);
  2366. format(szMiscArray, sizeof(szMiscArray), "%s has deposited $%i into the safe.", GetPlayerNameEx(playerid), strval(inputtext));
  2367. GroupLog(iGroupID, szMiscArray);
  2368. format(szMiscArray, sizeof(szMiscArray), "You have deposited $%i into the safe.", strval(inputtext));
  2369. SendClientMessageEx(playerid, COLOR_WHITE, szMiscArray);
  2370. DeletePVar(playerid, "GSafe_Action");
  2371. DeletePVar(playerid, "GSafe_Opt");
  2372. OnPlayerStatsUpdate(playerid);
  2373. }
  2374. else return ShowPlayerDialogEx(playerid, DIALOG_GROUP_SACTIONEXEC, DIALOG_STYLE_INPUT, "Gang Safe", "The amount specified exceeds that that you have on you.\nPlease input another amount.", "Input", "Cancel");
  2375. }
  2376. case 2:
  2377. {
  2378. if(strval(inputtext) <= arrGroupData[iGroupID][g_iBudget])
  2379. {
  2380. new iMoney = strval(inputtext);
  2381. arrGroupData[iGroupID][g_iBudget] -= iMoney;
  2382. GivePlayerCash(playerid, amount);
  2383. format(szMiscArray, sizeof(szMiscArray), "%s has withdrawn $%s from the safe.", GetPlayerNameEx(playerid), number_format(iMoney));
  2384. GroupLog(iGroupID, szMiscArray);
  2385. format(szMiscArray, sizeof(szMiscArray), "You have withdrawn $%s from the safe.", number_format(iMoney));
  2386. format(string,sizeof(string),"{AA3333}AdmWarning{FFFF00}: %s has withdrawn $%s of the group money from their gang vault", GetPlayerNameEx(playerid), number_format(iMoney));
  2387. ABroadCast(COLOR_YELLOW, string, 2);
  2388. SendClientMessageEx(playerid, COLOR_WHITE, szMiscArray);
  2389. DeletePVar(playerid, "GSafe_Action");
  2390. DeletePVar(playerid, "GSafe_Opt");
  2391. }
  2392. else return ShowPlayerDialogEx(playerid, DIALOG_GROUP_SACTIONTYPE, DIALOG_STYLE_INPUT, "Gang Safe", "The amount specified exceeds that in the safe.\nPlease input another amount.", "Input", "Cancel");
  2393. }
  2394. }
  2395. }
  2396. case 1:
  2397. {
  2398. switch(GetPVarInt(playerid, "GSafe_Action"))
  2399. {
  2400. case 1:
  2401. {
  2402. if(strval(inputtext) <= PlayerInfo[playerid][pMats])
  2403. {
  2404. arrGroupData[iGroupID][g_iMaterials] += strval(inputtext);
  2405. PlayerInfo[playerid][pMats] -= strval(inputtext);
  2406. format(szMiscArray, sizeof(szMiscArray), "%s has deposited %i materials into the safe.", GetPlayerNameEx(playerid), strval(inputtext));
  2407. GroupLog(iGroupID, szMiscArray);
  2408. format(szMiscArray, sizeof(szMiscArray), "You have deposited %i materials into the safe.", strval(inputtext));
  2409. SendClientMessageEx(playerid, COLOR_WHITE, szMiscArray);
  2410. DeletePVar(playerid, "GSafe_Action");
  2411. DeletePVar(playerid, "GSafe_Opt");
  2412. }
  2413. else return ShowPlayerDialogEx(playerid, DIALOG_GROUP_SACTIONEXEC, DIALOG_STYLE_INPUT, "Gang Safe", "The amount specified exceeds that that you have on you.\nPlease input another amount.", "Input", "Cancel");
  2414. }
  2415. case 2:
  2416. {
  2417. if(strval(inputtext) <= arrGroupData[iGroupID][g_iMaterials])
  2418. {
  2419. arrGroupData[iGroupID][g_iMaterials] -= strval(inputtext);
  2420. PlayerInfo[playerid][pMats] += strval(inputtext);
  2421. format(szMiscArray, sizeof(szMiscArray), "%s has withdrawn %i materials from the safe.", GetPlayerNameEx(playerid), strval(inputtext));
  2422. GroupLog(iGroupID, szMiscArray);
  2423. format(szMiscArray, sizeof(szMiscArray), "You have withdrawn %i materials from the safe.", strval(inputtext));
  2424. SendClientMessageEx(playerid, COLOR_WHITE, szMiscArray);
  2425. DeletePVar(playerid, "GSafe_Action");
  2426. DeletePVar(playerid, "GSafe_Opt");
  2427. }
  2428. else return ShowPlayerDialogEx(playerid, DIALOG_GROUP_SACTIONTYPE, DIALOG_STYLE_INPUT, "Gang Safe", "The amount specified exceeds that in the safe.\nPlease input another amount.", "Input", "Cancel");
  2429. }
  2430. }
  2431. }
  2432. case 2: {
  2433. new iDrugID = GetPVarInt(playerid, "GLocker_SID");
  2434. switch(GetPVarInt(playerid, "GSafe_Action")) {
  2435. case 1: {
  2436. if(strval(inputtext) <= PlayerInfo[playerid][pDrugs][iDrugID]) {
  2437. arrGroupData[iGroupID][g_iDrugs][iDrugID] += strval(inputtext);
  2438. PlayerInfo[playerid][pDrugs][iDrugID] -= strval(inputtext);
  2439. format(szMiscArray, sizeof(szMiscArray), "%s has deposited %i grams of %s into the safe.", GetPlayerNameEx(playerid), strval(inputtext), Drugs[iDrugID]);
  2440. GroupLog(iGroupID, szMiscArray);
  2441. format(szMiscArray, sizeof(szMiscArray), "You have deposited %i grams of %s into the safe.", strval(inputtext), Drugs[iDrugID]);
  2442. SendClientMessageEx(playerid, COLOR_WHITE, szMiscArray);
  2443. DeletePVar(playerid, "GSafe_Action");
  2444. DeletePVar(playerid, "GSafe_Opt");
  2445. SaveGroup(iGroupID);
  2446. cmd_locker(playerid, "");
  2447. }
  2448. else return ShowPlayerDialogEx(playerid, DIALOG_GROUP_SACTIONEXEC, DIALOG_STYLE_INPUT, "Gang Safe", "The amount specified exceeds that that you have on you.\nPlease input another amount.", "Input", "Cancel");
  2449. }
  2450. case 2:
  2451. {
  2452. if(strval(inputtext) <= arrGroupData[iGroupID][g_iDrugs][iDrugID])
  2453. {
  2454. arrGroupData[iGroupID][g_iDrugs][iDrugID] -= strval(inputtext);
  2455. PlayerInfo[playerid][pDrugs][iDrugID] += strval(inputtext);
  2456. format(szMiscArray, sizeof(szMiscArray), "%s has withdrawn %i grams of %s from the safe.", GetPlayerNameEx(playerid), strval(inputtext), Drugs[iDrugID]);
  2457. GroupLog(iGroupID, szMiscArray);
  2458. format(szMiscArray, sizeof(szMiscArray), "You have withdrawn %i grams of %s from the safe.", strval(inputtext), Drugs[iDrugID]);
  2459. SendClientMessageEx(playerid, COLOR_WHITE, szMiscArray);
  2460. DeletePVar(playerid, "GSafe_Action");
  2461. DeletePVar(playerid, "GSafe_Opt");
  2462. SaveGroup(iGroupID);
  2463. cmd_locker(playerid, "");
  2464. }
  2465. else return ShowPlayerDialogEx(playerid, DIALOG_GROUP_SACTIONTYPE, DIALOG_STYLE_INPUT, "Gang Safe", "The amount specified exceeds that in the safe.\nPlease input another amount.", "Input", "Cancel");
  2466. }
  2467. }
  2468. }
  2469. /*case 3: {
  2470. new iIngredientID = GetPVarInt(playerid, "GLocker_SID");
  2471. switch(GetPVarInt(playerid, "GSafe_Action")) {
  2472. case 1: {
  2473. if(strval(inputtext) <= PlayerInfo[playerid][p_iIngredient][iIngredientID]) {
  2474. arrGroupData[iGroupID][g_iIngredients][iIngredientID] += strval(inputtext);
  2475. PlayerInfo[playerid][p_iIngredient][iIngredientID] -= strval(inputtext);
  2476. format(szMiscArray, sizeof(szMiscArray), "%s has deposited %i grams of %s into the safe.", GetPlayerNameEx(playerid), strval(inputtext), szIngredients[iIngredientID]);
  2477. GroupLog(iGroupID, szMiscArray);
  2478. format(szMiscArray, sizeof(szMiscArray), "You have deposited %i grams of %s into the safe.", strval(inputtext), szIngredients[iIngredientID]);
  2479. SendClientMessageEx(playerid, COLOR_WHITE, szMiscArray);
  2480. DeletePVar(playerid, "GSafe_Action");
  2481. DeletePVar(playerid, "GSafe_Opt");
  2482. format(szMiscArray, sizeof(szMiscArray), "UPDATE `groups` SET `%s` = '%d' WHERE `id` = '%d'", DS_Ingredients_GetSQLName(iIngredientID), arrGroupData[iGroupID][g_iIngredients][iIngredientID], iGroupID + 1);
  2483. mysql_tquery(MainPipeline, szMiscArray, false, "OnQueryFinish", "i", SENDDATA_THREAD);
  2484. cmd_locker(playerid, "");
  2485. }
  2486. else return ShowPlayerDialogEx(playerid, DIALOG_GROUP_SACTIONEXEC, DIALOG_STYLE_INPUT, "Gang Safe", "The amount specified exceeds that that you have on you.\nPlease input another amount.", "Input", "Cancel");
  2487. }
  2488. case 2:
  2489. {
  2490. if(strval(inputtext) <= arrGroupData[iGroupID][g_iIngredients][iIngredientID]) {
  2491. arrGroupData[iGroupID][g_iIngredients][iIngredientID] -= strval(inputtext);
  2492. PlayerInfo[playerid][p_iIngredient][iIngredientID] += strval(inputtext);
  2493. format(szMiscArray, sizeof(szMiscArray), "%s has withdrawn %i grams of %s from the safe.", GetPlayerNameEx(playerid), strval(inputtext), szIngredients[iIngredientID]);
  2494. GroupLog(iGroupID, szMiscArray);
  2495. format(szMiscArray, sizeof(szMiscArray), "You have withdrawn %i grams of %s from the safe.", strval(inputtext), szIngredients[iIngredientID]);
  2496. SendClientMessageEx(playerid, COLOR_WHITE, szMiscArray);
  2497. DeletePVar(playerid, "GSafe_Action");
  2498. DeletePVar(playerid, "GSafe_Opt");
  2499. format(szMiscArray, sizeof(szMiscArray), "UPDATE `groups` SET `%s` = '%d' WHERE `id` = '%d'", DS_Ingredients_GetSQLName(iIngredientID), arrGroupData[iGroupID][g_iIngredients][iIngredientID], iGroupID + 1);
  2500. mysql_tquery(MainPipeline, szMiscArray, false, "OnQueryFinish", "i", SENDDATA_THREAD);
  2501. cmd_locker(playerid, "");
  2502. }
  2503. else return ShowPlayerDialogEx(playerid, DIALOG_GROUP_SACTIONTYPE, DIALOG_STYLE_INPUT, "Gang Safe", "The amount specified exceeds that in the safe.\nPlease input another amount.", "Input", "Cancel");
  2504. }
  2505. }
  2506. }*/
  2507. }
  2508. SaveGroup(iGroupID);
  2509. }
  2510. }
  2511. case DIALOG_GROUP_WEAPONSAFE: {
  2512. //new iGroupID = PlayerInfo[playerid][pMember];
  2513. //if(!response) return 1;
  2514. if(response) {
  2515. if(strcmp(inputtext, "Deposit Weapon", true) == 0) {
  2516. for(new g = 0; g < 12; g++) {
  2517. if(PlayerInfo[playerid][pGuns][g] != 0 && PlayerInfo[playerid][pAGuns][g] == 0) {
  2518. format(szMiscArray, sizeof(szMiscArray), "%s\n%s(%i)", szMiscArray, Weapon_ReturnName(PlayerInfo[playerid][pGuns][g]), PlayerInfo[playerid][pGuns][g]);
  2519. }
  2520. }
  2521. DeletePVar(playerid, "GRW_Count");
  2522. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_WEAPONSAFE_DEPOSIT, DIALOG_STYLE_LIST, "Safe Weapon Deposit", szMiscArray, "Deposit", "Cancel");
  2523. }
  2524. /*if(strcmp(inputtext, "Next Page", true) == 0) {
  2525. SetPVarInt(playerid, "GRW_Count", GetPVarInt(playerid, "GRW_Count") + (listitem-2));
  2526. ShowGroupWeapons(playerid, PlayerInfo[playerid][pMember]);
  2527. return 1;
  2528. }*/
  2529. else {
  2530. new gid;
  2531. if(listitem <= 18) gid = listitem + 1;
  2532. else if(listitem > 18) gid = listitem + 4;
  2533. if(gid == 21) gid++; // TODO: a real fix? i guess?
  2534. SetPVarInt(playerid, "GLGunTake", gid);
  2535. new str[9];
  2536. new stpos = strfind(inputtext, "(");
  2537. new fpos = strfind(inputtext, ")");
  2538. strmid(str, inputtext, stpos+1, fpos);
  2539. new id = strval(str);
  2540. if(id < 1) return SendClientMessageEx(playerid, COLOR_WHITE, "There are none left.");
  2541. //WithdrawGroupSafeWeapon(playerid, iGroupID, id);
  2542. // add another dialog to see whether to place in crate or take
  2543. ShowPlayerDialogEx(playerid, DIALOG_WEAPONSAFE_WITHDRAW, DIALOG_STYLE_LIST, "Safe Withdraw", "Equip\nTransfer To Crate", "Select", "Cancel");
  2544. return 1;
  2545. }
  2546. }
  2547. else DeletePVar(playerid, "GRW_Count");
  2548. }
  2549. case DIALOG_WEAPONSAFE_WITHDRAW: {
  2550. new
  2551. iGroupID = PlayerInfo[playerid][pMember],
  2552. iWepID = GetPVarInt(playerid, "GLGunTake");
  2553. if(!response) {
  2554. DeletePVar(playerid, "GLGunTake");
  2555. return cmd_locker(playerid, "");
  2556. }
  2557. switch(listitem) {
  2558. case 0: { // equip
  2559. DeletePVar(playerid, "GLGunTake");
  2560. WithdrawGroupSafeWeapon(playerid, iGroupID, iWepID);
  2561. }
  2562. case 1: { // transfer to crate
  2563. //TransferItemToCrate(playerid, itemid, iAmount, iCrateID)
  2564. ShowPlayerDialogEx(playerid, DIALOG_WEAPONSAFE_WITHDRAW_T, DIALOG_STYLE_INPUT, "Transfer To Crate", "Enter the crate ID you wish to transfer the item to", "Select", "Cancel");
  2565. }
  2566. }
  2567. }
  2568. case DIALOG_WEAPONSAFE_WITHDRAW_T: {
  2569. /*
  2570. new
  2571. iWepID = GetPVarInt(playerid, "GLGunTake"),
  2572. iCrateID = strval(inputtext);
  2573. if(!response) {
  2574. DeletePVar(playerid, "GLGunTake");
  2575. return cmd_locker(playerid, "");
  2576. }
  2577. if(!IsValidDynamicObject(arrGCrateData[iCrateID][gcr_iObject])) return SendClientMessageEx(playerid, COLOR_GRAD2, "Invalid crate ID.");
  2578. if(CanTransferToCrate(iWepID)) TransferItemToCrate(playerid, ReturnSlotForCrate(iWepID), 1, iCrateID);
  2579. else return SendClientMessageEx(playerid, COLOR_WHITE, "This item cannot be transfered to crates");*/
  2580. return SendClientMessageEx(playerid, COLOR_WHITE, "This has been disabled due to a re-work!");
  2581. }
  2582. case DIALOG_GROUP_WEAPONSAFE_DEPOSIT: {
  2583. if(!response) return 1;
  2584. new iGroupID = PlayerInfo[playerid][pMember];
  2585. new stpos = strfind(inputtext, "(");
  2586. new fpos = strfind(inputtext, ")");
  2587. new str[4], id;
  2588. strmid(str, inputtext, stpos+1, fpos);
  2589. id = strval(str);
  2590. AddGroupSafeWeapon(playerid, iGroupID, id);
  2591. }
  2592. case DIALOG_GROUP_TURNOUT:
  2593. {
  2594. if(!response) return 1;
  2595. new closestCar = GetClosestCar(playerid, .fRange = 8.0);
  2596. if(closestCar == INVALID_VEHICLE_ID) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not near any vehicle!");
  2597. ClearAnimationsEx(playerid);
  2598. if(listitem == 0)
  2599. {
  2600. if(IsACop(playerid) && IsACopCar(closestCar)) SetPlayerSkin(playerid, 285); // SWAT
  2601. else if(IsAMedic(playerid) && IsAnAmbulance(closestCar)) SetPlayerSkin(playerid, 277); // LS Fire
  2602. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not near a group vehicle!");
  2603. }
  2604. if(listitem == 1 || listitem == 3)
  2605. {
  2606. if(IsACop(playerid) || listitem == 3) // Original Clothes
  2607. {
  2608. if(!GetPVarType(playerid, "turnoutVeh")) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not wearing any turnout clothes!");
  2609. if(!IsPlayerInRangeOfVehicle(playerid, GetPVarInt(playerid, "turnoutVeh"), 8.0)) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not near the vehicle you changed clothes from.");
  2610. DeletePVar(playerid, "turnoutVeh");
  2611. SetPlayerSkin(playerid, PlayerInfo[playerid][pModel]);
  2612. SendClientMessageEx(playerid, -1, "You have returned to your original clothing.");
  2613. return 1;
  2614. }
  2615. if(IsAnAmbulance(closestCar)) SetPlayerSkin(playerid, 279); // SF Fire
  2616. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not near a group vehicle!");
  2617. }
  2618. if(listitem == 2)
  2619. {
  2620. if(IsAnAmbulance(closestCar)) SetPlayerSkin(playerid, 278); // LV Fire
  2621. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not near a group vehicle!");
  2622. }
  2623. SetPVarInt(playerid, "turnoutVeh", closestCar);
  2624. return 1;
  2625. }
  2626. // END DYNAMIC GROUP CODE
  2627. }
  2628. return 0;
  2629. }
  2630. hook OnVehicleSpawn(vehicleid)
  2631. {
  2632. if(GetGVarType("VehSiren", vehicleid)) ToggleSiren(vehicleid, 1);
  2633. }
  2634. public OnVehicleSirenStateChange(playerid, vehicleid, newstate)
  2635. {
  2636. if(DynVeh[vehicleid] != -1)
  2637. {
  2638. for(new i = 0; i != MAX_DV_OBJECTS; i++)
  2639. {
  2640. ToggleDVSiren(DynVeh[vehicleid], i, newstate);
  2641. }
  2642. }
  2643. switch(newstate)
  2644. {
  2645. case 0: ToggleSiren(vehicleid, 1);
  2646. case 1:
  2647. {
  2648. if(!GetGVarType("VehSiren", vehicleid)) ToggleSiren(vehicleid, 0);
  2649. }
  2650. }
  2651. return 1;
  2652. }
  2653. stock EditDV(playerid, iDvSlotID, params[], name[], Float:value, &slot)
  2654. {
  2655. new string[128];
  2656. format(string, sizeof(string), "%s has edited DV Slot %d - %s.", GetPlayerNameEx(playerid), iDvSlotID, params);
  2657. Log("logs/dv.log", string);
  2658. if(strcmp(name, "siren", true) == 0)
  2659. {
  2660. DynVehicleInfo[iDvSlotID][gv_iSiren] = !DynVehicleInfo[iDvSlotID][gv_iSiren];
  2661. DynVeh_Save(iDvSlotID);
  2662. DynVeh_Spawn(iDvSlotID);
  2663. SendClientMessageEx(playerid, COLOR_WHITE, DynVehicleInfo[iDvSlotID][gv_iSiren] ? ("You have enabled the siren on the dynamic vehicle."):("You have disabled the siren on the dynamic vehicle."));
  2664. return 1;
  2665. }
  2666. if(strcmp(name, "delete", true) == 0)
  2667. {
  2668. DynVehicleInfo[iDvSlotID][gv_iModel] = 0;
  2669. DynVehicleObjInfo[iDvSlotID][0][gv_iAttachedObjectModel] = INVALID_OBJECT_ID;
  2670. DynVehicleObjInfo[iDvSlotID][1][gv_iAttachedObjectModel] = INVALID_OBJECT_ID;
  2671. DynVehicleObjInfo[iDvSlotID][2][gv_iAttachedObjectModel] = INVALID_OBJECT_ID;
  2672. DynVehicleObjInfo[iDvSlotID][3][gv_iAttachedObjectModel] = INVALID_OBJECT_ID;
  2673. DynVehicleInfo[iDvSlotID][gv_igID] = INVALID_GROUP_ID;
  2674. DynVehicleInfo[iDvSlotID][gv_igDivID] = 0;
  2675. DynVehicleInfo[iDvSlotID][gv_fMaxHealth] = 1000;
  2676. DynVehicleInfo[iDvSlotID][gv_iUpkeep] = 0;
  2677. DynVehicleInfo[iDvSlotID][gv_iSiren] = 0;
  2678. DynVeh_Save(iDvSlotID);
  2679. DynVeh_Spawn(iDvSlotID);
  2680. SendClientMessageEx(playerid, COLOR_WHITE, "You have deleted the dynamic vehicle");
  2681. return 1;
  2682. }
  2683. if(strcmp(name, "vw", true) == 0)
  2684. {
  2685. DynVehicleInfo[iDvSlotID][gv_iVW] = floatround(value);
  2686. DynVeh_Save(iDvSlotID);
  2687. DynVeh_Spawn(iDvSlotID);
  2688. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the virtual world of the dynamic vehicle");
  2689. return 1;
  2690. }
  2691. if(strcmp(name, "disabled", true) == 0)
  2692. {
  2693. DynVehicleInfo[iDvSlotID][gv_iDisabled] = floatround(value);
  2694. DynVeh_Save(iDvSlotID);
  2695. DynVeh_Spawn(iDvSlotID);
  2696. SendClientMessageEx(playerid, COLOR_WHITE, "You have disabled the dynamic vehicle");
  2697. return 1;
  2698. }
  2699. if(strcmp(name, "vmodel", true) == 0)
  2700. {
  2701. if(!(400 < value < 612)) return SendClientMessageEx(playerid, COLOR_GRAD1, "Invalid Model ID");
  2702. DynVehicleInfo[iDvSlotID][gv_iModel] = floatround(value);
  2703. DynVeh_Save(iDvSlotID);
  2704. DynVeh_Spawn(iDvSlotID);
  2705. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the vehicle model of the dynamic vehicle");
  2706. return 1;
  2707. }
  2708. if(strcmp(name, "vcol1", true) == 0)
  2709. {
  2710. if(!(0 <= value <= 255)) {
  2711. return SendClientMessageEx(playerid, COLOR_GRAD2, "Invalid color specified (IDs start at 0, and end at 255).");
  2712. }
  2713. DynVehicleInfo[iDvSlotID][gv_iCol1] = floatround(value);
  2714. DynVeh_Save(iDvSlotID);
  2715. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the color (1) of the dynamic vehicle");
  2716. return 1;
  2717. }
  2718. if(strcmp(name, "vcol2", true) == 0)
  2719. {
  2720. if(!(0 <= value <= 255)) {
  2721. return SendClientMessageEx(playerid, COLOR_GRAD2, "Invalid color specified (IDs start at 0, and end at 255).");
  2722. }
  2723. DynVehicleInfo[iDvSlotID][gv_iCol2] = floatround(value);
  2724. DynVeh_Save(iDvSlotID);
  2725. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the color (2) of the dynamic vehicle");
  2726. return 1;
  2727. }
  2728. if(strcmp(name, "groupid", true) == 0)
  2729. {
  2730. if(value == 0)
  2731. {
  2732. DynVehicleInfo[iDvSlotID][gv_igID] = INVALID_GROUP_ID;
  2733. DynVeh_Save(iDvSlotID);
  2734. SendClientMessageEx(playerid, COLOR_WHITE, "You have removed the group id flag of the dynamic vehicle");
  2735. return 1;
  2736. }
  2737. if(!(0 <= value < MAX_GROUPS)) return SendClientMessageEx(playerid, COLOR_GRAD2, "Invalid group specified (Start at 1, end at "#MAX_GROUPS")");
  2738. DynVehicleInfo[iDvSlotID][gv_igID] = floatround(value-1);
  2739. DynVeh_Save(iDvSlotID);
  2740. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the group id flag of the dynamic vehicle");
  2741. return 1;
  2742. }
  2743. if(strcmp(name, "divid", true) == 0)
  2744. {
  2745. DynVehicleInfo[iDvSlotID][gv_igDivID] = floatround(value);
  2746. DynVeh_Save(iDvSlotID);
  2747. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the division id of the dynamic vehicle");
  2748. return 1;
  2749. }
  2750. if(strcmp(name, "rank", true) == 0)
  2751. {
  2752. DynVehicleInfo[iDvSlotID][gv_irID] = floatround(value);
  2753. DynVeh_Save(iDvSlotID);
  2754. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the rank id of the dynamic vehicle");
  2755. return 1;
  2756. }
  2757. if(strcmp(name, "loadmax", true) == 0)
  2758. {
  2759. if(!(0 < value < 6)) return SendClientMessageEx(playerid, COLOR_GRAD2, "Invalid group specified (Start at 1, end at 6)");
  2760. DynVehicleInfo[iDvSlotID][gv_iLoadMax] = floatround(value);
  2761. DynVeh_Save(iDvSlotID);
  2762. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the load max of the dynamic vehicle");
  2763. return 1;
  2764. }
  2765. if(strcmp(name, "maxhealth", true) == 0)
  2766. {
  2767. DynVehicleInfo[iDvSlotID][gv_fMaxHealth] = (value);
  2768. DynVeh_Save(iDvSlotID);
  2769. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the maximum health of the dynamic vehicle");
  2770. return 1;
  2771. }
  2772. if(strcmp(name, "upkeep", true) == 0)
  2773. {
  2774. DynVehicleInfo[iDvSlotID][gv_iUpkeep] = floatround(value);
  2775. DynVeh_Save(iDvSlotID);
  2776. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the up keep of the dynamic vehicle");
  2777. return 1;
  2778. }
  2779. if(strcmp(name, "vtype", true) == 0)
  2780. {
  2781. DynVehicleInfo[iDvSlotID][gv_iType] = floatround(value);
  2782. DynVeh_Save(iDvSlotID);
  2783. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the vehicle type of the dynamic vehicle");
  2784. return 1;
  2785. }
  2786. if(1 <= slot <= MAX_DV_OBJECTS)
  2787. {
  2788. if(strcmp(name, "objmodel", true) == 0)
  2789. {
  2790. if(slot == 3 || slot == 4)
  2791. {
  2792. if(floatround(value) != 0 && !IsABlankTexture(floatround(value))) return SendClientMessageEx(playerid, COLOR_GREY, "DV Object slots 3 and 4 can only be assigned models 19475-19483");
  2793. }
  2794. DynVehicleObjInfo[iDvSlotID][slot-1][gv_iAttachedObjectModel] = floatround(value);
  2795. DynVeh_Spawn(iDvSlotID);
  2796. DynVeh_Save(iDvSlotID);
  2797. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the object model of the dynamic vehicle");
  2798. return 1;
  2799. }
  2800. if(strcmp(name, "objx", true) == 0)
  2801. {
  2802. DynVehicleObjInfo[iDvSlotID][slot-1][gv_fObjectX] = value;
  2803. DynVeh_Spawn(iDvSlotID);
  2804. DynVeh_Save(iDvSlotID);
  2805. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the object position (X) of the dynamic vehicle");
  2806. return 1;
  2807. }
  2808. if(strcmp(name, "objy", true) == 0)
  2809. {
  2810. DynVehicleObjInfo[iDvSlotID][slot-1][gv_fObjectY] = value;
  2811. DynVeh_Spawn(iDvSlotID);
  2812. DynVeh_Save(iDvSlotID);
  2813. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the object position (Y) of the dynamic vehicle");
  2814. return 1;
  2815. }
  2816. if(strcmp(name, "objz", true) == 0)
  2817. {
  2818. DynVehicleObjInfo[iDvSlotID][slot-1][gv_fObjectZ] = value;
  2819. DynVeh_Spawn(iDvSlotID);
  2820. DynVeh_Save(iDvSlotID);
  2821. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the object position (Z) of the dynamic vehicle");
  2822. return 1;
  2823. }
  2824. if(strcmp(name, "objrx", true) == 0)
  2825. {
  2826. DynVehicleObjInfo[iDvSlotID][slot-1][gv_fObjectRX] = value;
  2827. DynVeh_Spawn(iDvSlotID);
  2828. DynVeh_Save(iDvSlotID);
  2829. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the object rotation (X) of the dynamic vehicle");
  2830. return 1;
  2831. }
  2832. if(strcmp(name, "objry", true) == 0)
  2833. {
  2834. DynVehicleObjInfo[iDvSlotID][slot-1][gv_fObjectRY] = value;
  2835. DynVeh_Spawn(iDvSlotID);
  2836. DynVeh_Save(iDvSlotID);
  2837. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the object rotation (Y) of the dynamic vehicle");
  2838. return 1;
  2839. }
  2840. if(strcmp(name, "objrz", true) == 0)
  2841. {
  2842. DynVehicleObjInfo[iDvSlotID][slot-1][gv_fObjectRZ] = value;
  2843. DynVeh_Spawn(iDvSlotID);
  2844. DynVeh_Save(iDvSlotID);
  2845. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the object rotation (Z) of the dynamic vehicle");
  2846. return 1;
  2847. }
  2848. if(strcmp(name, "objmatsize", true) == 0)
  2849. {
  2850. DynVehicleObjInfo[iDvSlotID][slot-1][gv_fObjectMatSize] = floatround(value);
  2851. DynVeh_Spawn(iDvSlotID);
  2852. DynVeh_Save(iDvSlotID);
  2853. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the object material size of the dynamic vehicle");
  2854. return 1;
  2855. }
  2856. if(strcmp(name, "objsize", true) == 0)
  2857. {
  2858. DynVehicleObjInfo[iDvSlotID][slot-1][gv_fObjectSize] = floatround(value);
  2859. DynVeh_Spawn(iDvSlotID);
  2860. DynVeh_Save(iDvSlotID);
  2861. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the object text size of the dynamic vehicle");
  2862. return 1;
  2863. }
  2864. }
  2865. else return SendClientMessageEx(playerid, COLOR_GRAD2, "Slot ID Must be between 1 and "#MAX_DV_OBJECTS"!");
  2866. return 1;
  2867. }
  2868. stock IsABlankTexture(modelid)
  2869. {
  2870. switch(modelid)
  2871. {
  2872. case 19475, 19476, 19477, 19478, 19479, 19480, 19481, 19482, 19483: return 1;
  2873. }
  2874. return 0;
  2875. }
  2876. CMD:clearbugs(playerid, params[])
  2877. {
  2878. if(IsACop(playerid))
  2879. {
  2880. if(PlayerInfo[playerid][pLeader] == PlayerInfo[playerid][pMember] && PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iBugAccess]) // has leader flag
  2881. {
  2882. SendClientMessageEx(playerid, COLOR_GRAD2, "All agency bugs destroyed.");
  2883. foreach(new i : Player)
  2884. {
  2885. if(PlayerInfo[i][pBugged] == PlayerInfo[playerid][pMember]){
  2886. PlayerInfo[i][pBugged] = INVALID_GROUP_ID;
  2887. }
  2888. }
  2889. new query[256];
  2890. mysql_format(MainPipeline, query, sizeof(query), "UPDATE accounts SET `Bugged` = %d WHERE `Bugged` > %d AND `Online` = 0", INVALID_GROUP_ID, INVALID_GROUP_ID);
  2891. mysql_tquery(MainPipeline, query, "OnQueryFinish", "i", SENDDATA_THREAD);
  2892. return 1;
  2893. }
  2894. }
  2895. return SendClientMessageEx(playerid, COLOR_GRAD2, "You're not authorized to use this command.");
  2896. }
  2897. CMD:listbugs(playerid, params[])
  2898. {
  2899. if(IsACop(playerid))
  2900. {
  2901. if(PlayerInfo[playerid][pLeader] == PlayerInfo[playerid][pMember] && PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iBugAccess]) // has leader flag
  2902. {
  2903. SendClientMessageEx(playerid, COLOR_GREEN, "List of deployed Bugs:");
  2904. foreach(new i : Player)
  2905. {
  2906. if(PlayerInfo[i][pBugged] == PlayerInfo[playerid][pMember]){
  2907. SendClientMessageEx(playerid, COLOR_GREEN, GetPlayerNameEx(i));
  2908. }
  2909. }
  2910. new query[256];
  2911. mysql_format(MainPipeline, query, sizeof(query), "SELECT `Username`, `Bugged` FROM `accounts` WHERE `Bugged` = %d AND `Online` = 0", PlayerInfo[playerid][pMember]);
  2912. mysql_tquery(MainPipeline, query, "OnQueryFinish", "iii", BUG_LIST_THREAD, playerid, g_arrQueryHandle{playerid});
  2913. return 1;
  2914. }
  2915. }
  2916. return SendClientMessageEx(playerid, COLOR_GRAD2, "You're not authorized to use this command.");
  2917. }
  2918. CMD:online(playerid, params[]) {
  2919. if(PlayerInfo[playerid][pLeader] >= 0 || PlayerInfo[playerid][pAdmin] >= 4 || PlayerInfo[playerid][pASM] >= 1 || PlayerInfo[playerid][pFactionModerator] >= 1 || IsACriminal(playerid))
  2920. {
  2921. if(PlayerInfo[playerid][pMember] == INVALID_GROUP_ID) return SendClientMessageEx(playerid, -1, "You are not a member of any group!");
  2922. szMiscArray[0] = 0;
  2923. new badge[11];
  2924. foreach(new i: Player)
  2925. {
  2926. if(PlayerInfo[i][pAdmin] >= 2 && PlayerInfo[i][pTogReports] == 0) goto end;
  2927. if(strcmp(PlayerInfo[i][pBadge], "None", true) != 0) format(badge, sizeof(badge), "[%s] ", PlayerInfo[i][pBadge]);
  2928. else format(badge, sizeof(badge), "");
  2929. if(IsAnFTSDriver(playerid) && IsAnFTSDriver(i)) switch(TransportDuty[i]) {
  2930. case 1: format(szMiscArray, sizeof(szMiscArray), "%s\n* %s%s (on duty), %i calls accepted", szMiscArray, badge, GetPlayerNameEx(i), PlayerInfo[i][pCallsAccepted]);
  2931. default: format(szMiscArray, sizeof(szMiscArray), "%s\n* %s%s (off duty), %i calls accepted", szMiscArray, badge, GetPlayerNameEx(i), PlayerInfo[i][pCallsAccepted]);
  2932. }
  2933. else if(IsAMedic(playerid) && IsAMedic(i) && (arrGroupData[PlayerInfo[playerid][pMember]][g_iAllegiance] == arrGroupData[PlayerInfo[i][pMember]][g_iAllegiance])) switch(PlayerInfo[i][pDuty]) {
  2934. case 1: format(szMiscArray, sizeof(szMiscArray), "%s\n* %s%s (on duty), %i calls accepted, %i patients delivered.", szMiscArray, badge, GetPlayerNameEx(i), PlayerInfo[i][pCallsAccepted], PlayerInfo[i][pPatientsDelivered]);
  2935. default: format(szMiscArray, sizeof(szMiscArray), "%s\n* %s%s (off duty), %i calls accepted, %i patients delivered.", szMiscArray, badge, GetPlayerNameEx(i), PlayerInfo[i][pCallsAccepted], PlayerInfo[i][pPatientsDelivered]);
  2936. }
  2937. else if(IsACriminal(playerid) && PlayerInfo[i][pMember] == PlayerInfo[playerid][pMember]) {
  2938. format(szMiscArray, sizeof(szMiscArray), "* %s | Rank: %s (%d) | Division: %s", GetPlayerNameEx(i), arrGroupRanks[PlayerInfo[i][pMember]][PlayerInfo[i][pRank]], PlayerInfo[i][pRank], PlayerInfo[i][pDivision] != INVALID_DIVISION ? arrGroupDivisions[PlayerInfo[i][pMember]][PlayerInfo[i][pDivision]] : ("N/A"));
  2939. SendClientMessageEx(playerid, -1, szMiscArray);
  2940. }
  2941. else if(PlayerInfo[i][pMember] == PlayerInfo[playerid][pMember]) switch(PlayerInfo[i][pDuty]) {
  2942. case 1: format(szMiscArray, sizeof(szMiscArray), "%s\n* %s%s (on duty)", szMiscArray, badge, GetPlayerNameEx(i));
  2943. default: format(szMiscArray, sizeof(szMiscArray), "%s\n* %s%s (off duty)", szMiscArray, badge, GetPlayerNameEx(i));
  2944. }
  2945. end:
  2946. }
  2947. if(!isnull(szMiscArray)) {
  2948. if(!IsACriminal(playerid)) strdel(szMiscArray, 0, 1), ShowPlayerDialogEx(playerid, 0, DIALOG_STYLE_LIST, "Online Members", szMiscArray, "Select", "Cancel");
  2949. }
  2950. else SendClientMessageEx(playerid, COLOR_GREY, "No members are online at this time.");
  2951. }
  2952. else SendClientMessageEx(playerid, COLOR_GREY, "Only group leaders may use this command.");
  2953. return 1;
  2954. }
  2955. CMD:badge(playerid, params[]) {
  2956. if(PlayerInfo[playerid][pMember] >= 0 && arrGroupData[PlayerInfo[playerid][pMember]][g_hDutyColour] != 0xFFFFFF && arrGroupData[PlayerInfo[playerid][pMember]][g_iGroupType] != GROUP_TYPE_CRIMINAL)
  2957. {
  2958. if(GetPVarType(playerid, "IsInArena") || PlayerInfo[playerid][pJailTime] > 0 || GetPVarInt(playerid, "EventToken") != 0)
  2959. {
  2960. SendClientMessageEx(playerid, COLOR_GREY, "You can't use your badge now.");
  2961. return 1;
  2962. }
  2963. #if defined zombiemode
  2964. if(zombieevent == 1 && GetPVarType(playerid, "pIsZombie")) return SendClientMessageEx(playerid, COLOR_GREY, "Zombies can't use this.");
  2965. #endif
  2966. if(PlayerInfo[playerid][pDuty]) {
  2967. PlayerInfo[playerid][pDuty] = 0;
  2968. SetPlayerToTeamColor(playerid);
  2969. SendClientMessageEx(playerid, COLOR_WHITE, "You have hidden your badge, and will now be identified as being off-duty.");
  2970. if(IsAMedic(playerid) || IsFirstAid(playerid))
  2971. {
  2972. Medics -= 1;
  2973. }
  2974. }
  2975. else {
  2976. PlayerInfo[playerid][pDuty] = 1;
  2977. SetPlayerToTeamColor(playerid);
  2978. SendClientMessageEx(playerid, COLOR_WHITE, "You have shown your badge, and will now be identified as being on-duty.");
  2979. if(IsAMedic(playerid) || IsFirstAid(playerid))
  2980. {
  2981. Medics += 1;
  2982. }
  2983. }
  2984. }
  2985. return 1;
  2986. }
  2987. CMD:viewbudget(playerid, params[])
  2988. {
  2989. new i = PlayerInfo[playerid][pMember];
  2990. new string[128];
  2991. if(arrGroupData[i][g_iGroupType] == GROUP_TYPE_GOV ||arrGroupData[i][g_iGroupType] == GROUP_TYPE_LEA || arrGroupData[i][g_iGroupType] == GROUP_TYPE_MEDIC || arrGroupData[i][g_iGroupType] == GROUP_TYPE_JUDICIAL || arrGroupData[i][g_iGroupType] == GROUP_TYPE_TAXI || arrGroupData[i][g_iGroupType] == GROUP_TYPE_NEWS || arrGroupData[i][g_iGroupType] == GROUP_TYPE_CONTRACT || arrGroupData[i][g_iGroupType] == GROUP_TYPE_TOWING)
  2992. {
  2993. SendClientMessage(playerid, 0x008EFC00, " BALANCE SHEET ");
  2994. if(arrGroupData[i][g_szGroupName][0] && arrGroupData[i][g_hDutyColour] != 0) format(string, sizeof(string), "{%6x}%s {AFAFAF} [Balance: $%s] [Hourly Payments: $%s]| ", arrGroupData[i][g_hDutyColour], arrGroupData[i][g_szGroupName], number_format(arrGroupData[i][g_iBudget]), number_format(arrGroupData[i][g_iBudgetPayment]));
  2995. else if(arrGroupData[i][g_szGroupName][0]) format(string, sizeof(string), "%s [Balance: $%s] [Hourly Payments: $%s]| ", arrGroupData[i][g_szGroupName], number_format(arrGroupData[i][g_iBudget]), number_format(arrGroupData[i][g_iBudgetPayment]));
  2996. SendClientMessage(playerid, COLOR_YELLOW, string);
  2997. }
  2998. else return SendClientMessage(playerid, COLOR_GRAD2, "Your agency does not receive government payments.");
  2999. return 1;
  3000. }
  3001. CMD:setbudget(playerid, params[])
  3002. {
  3003. szMiscArray[0] = 0;
  3004. new iGroupID;
  3005. if(arrGroupData[PlayerInfo[playerid][pMember]][g_iGroupType] == GROUP_TYPE_GOV)
  3006. {
  3007. if(PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iTreasuryAccess] && IsGroupLeader(playerid))
  3008. {
  3009. new
  3010. iBudgetAmt,
  3011. string[128];
  3012. if(sscanf(params, "iii", iGroupID, iBudgetAmt))
  3013. {
  3014. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /setbudget [Group ID] [$ Per Budget Payment (Hourly)]");
  3015. for(new i = 0; i < MAX_GROUPS; i++)
  3016. {
  3017. if(arrGroupData[PlayerInfo[playerid][pMember]][g_iAllegiance] == arrGroupData[i][g_iAllegiance])
  3018. {
  3019. if(arrGroupData[i][g_iGroupType] == GROUP_TYPE_LEA || arrGroupData[i][g_iGroupType] == GROUP_TYPE_MEDIC || arrGroupData[i][g_iGroupType] == GROUP_TYPE_JUDICIAL || arrGroupData[i][g_iGroupType] == GROUP_TYPE_TAXI || arrGroupData[i][g_iGroupType] == GROUP_TYPE_TOWING)
  3020. {
  3021. if(arrGroupData[i][g_szGroupName][0] && arrGroupData[i][g_hDutyColour] != 0) format(string, sizeof(string), "%d - {%6x}%s {AFAFAF} [Balance: $%s] [Current Budget: $%s]| ", i, arrGroupData[i][g_hDutyColour], arrGroupData[i][g_szGroupName], number_format(arrGroupData[i][g_iBudget]), number_format(arrGroupData[i][g_iBudgetPayment]));
  3022. else if(arrGroupData[i][g_szGroupName][0]) format(string, sizeof(string), "%d - %s [Balance: $%s] [Current Budget: $%s]| ", i, arrGroupData[i][g_szGroupName], number_format(arrGroupData[i][g_iBudget]), number_format(arrGroupData[i][g_iBudgetPayment]));
  3023. SendClientMessageEx(playerid, COLOR_GRAD2, string);
  3024. }
  3025. }
  3026. }
  3027. return 1;
  3028. }
  3029. if(0 <= iGroupID < MAX_GROUPS && (arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_LEA || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_MEDIC || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_JUDICIAL || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_TAXI || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_TOWING))
  3030. {
  3031. if(arrGroupData[PlayerInfo[playerid][pMember]][g_iAllegiance] == arrGroupData[iGroupID][g_iAllegiance])
  3032. {
  3033. arrGroupData[iGroupID][g_iBudgetPayment] = iBudgetAmt;
  3034. format(string, sizeof(string), "You have set %s's Budget Payment to $%s. This will be issued hourly to pay for their vehicles, weapons and staffing", arrGroupData[iGroupID][g_szGroupName], number_format(iBudgetAmt));
  3035. SendClientMessage(playerid, COLOR_GRAD1, string);
  3036. format(szMiscArray, sizeof(szMiscArray), "%s has changed %s's hourly pay to $%s", GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_szGroupName], number_format(iBudgetAmt));
  3037. GroupPayLog(PlayerInfo[playerid][pMember], szMiscArray);
  3038. }
  3039. else return SendClientMessage(playerid, COLOR_GRAD2, "This agency is not under your government.");
  3040. }
  3041. else return SendClientMessage(playerid, COLOR_GRAD2, "Invalid Group ID");
  3042. }
  3043. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You must be a group leader and hold the minimum rank required for treasury access.");
  3044. }
  3045. else return SendClientMessage(playerid, COLOR_GRAD2, "You're not a Government Official!");
  3046. return 1;
  3047. }
  3048. CMD:gwithdraw(playerid, params[])
  3049. {
  3050. new iGroupID;
  3051. new string[128], amount, reason[64];
  3052. if(PlayerInfo[playerid][pAdmin] >= 4 || PlayerInfo[playerid][pASM] >= 1)
  3053. {
  3054. if(sscanf(params, "dds[64]", iGroupID, amount, reason))
  3055. {
  3056. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /gwithdraw [groupid] [amount] [reason]");
  3057. return 1;
  3058. }
  3059. if(!(-1 < iGroupID <= MAX_GROUPS))
  3060. {
  3061. SendClientMessageEx(playerid, COLOR_RED, "* Invalid Group ID");
  3062. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /gwithdraw [groupid] [amount] [reason]");
  3063. return 1;
  3064. }
  3065. }
  3066. else if(-1 < PlayerInfo[playerid][pLeader] <= MAX_GROUPS)
  3067. {
  3068. iGroupID = PlayerInfo[playerid][pLeader];
  3069. if(sscanf(params, "ds[64]", amount, reason))
  3070. {
  3071. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /gwithdraw [amount] [reason]");
  3072. format(string, sizeof(string), "* VAULT BALANCE: $%s.", number_format(arrGroupData[iGroupID][g_iBudget]));
  3073. SendClientMessageEx(playerid, COLOR_LIGHTBLUE, string);
  3074. return 1;
  3075. }
  3076. }
  3077. else return SendClientMessage(playerid, COLOR_GRAD3, " You are not a group leader or an authorized admin. ");
  3078. if(PlayerInfo[playerid][pAdmin] >= 4 || PlayerInfo[playerid][pASM] >= 1 || PlayerInfo[playerid][pLeader] != iGroupID) iGroupID--;
  3079. if(amount < 0)
  3080. {
  3081. SendClientMessageEx(playerid, COLOR_LIGHTBLUE, "Invalid amount specified.");
  3082. return 1;
  3083. }
  3084. if( arrGroupData[iGroupID][g_iBudget] > amount )
  3085. {
  3086. arrGroupData[iGroupID][g_iBudget] -= amount;
  3087. new str[128];
  3088. format(str, sizeof(str), "%s has withdrawn $%d from %s's Budget Fund - reason: %s", GetPlayerNameEx(playerid), amount, arrGroupData[iGroupID][g_szGroupName], reason);
  3089. GroupPayLog(iGroupID, str);
  3090. Misc_Save();
  3091. SaveGroup(iGroupID);
  3092. GivePlayerCash( playerid, amount );
  3093. format( string, sizeof( string ), "You have withdrawn $%d from the group vault.", amount );
  3094. SendClientMessageEx( playerid, COLOR_WHITE, string );
  3095. format(string,sizeof(string),"{AA3333}AdmWarning{FFFF00}: %s has withdrawn $%s of the group money from their vault, reason: %s.", GetPlayerNameEx(playerid), number_format(amount), reason);
  3096. ABroadCast( COLOR_YELLOW, string, 2);
  3097. format(string,sizeof(string),"%s(%d) has withdrawn $%s of the group money from %s's vault, reason: %s.",GetPlayerNameEx(playerid), GetPlayerSQLId(playerid), number_format(amount),arrGroupData[iGroupID][g_szGroupName],reason);
  3098. Log("logs/rpspecial.log", string);
  3099. }
  3100. else
  3101. {
  3102. SendClientMessageEx(playerid, COLOR_GREY, "Insufficient funds are available.");
  3103. }
  3104. return 1;
  3105. }
  3106. CMD:gdonate(playerid, params[])
  3107. {
  3108. new iGroupID = PlayerInfo[playerid][pMember];
  3109. if((0 <= iGroupID <= MAX_GROUPS))
  3110. {
  3111. if(arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_LEA || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_MEDIC || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_JUDICIAL || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_TAXI || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_NEWS || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_TOWING || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_CONTRACT || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_GOV)
  3112. {
  3113. new string[128], moneys;
  3114. if(sscanf(params, "d", moneys)) return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /gdonate [amount]");
  3115. if(moneys < 1)
  3116. {
  3117. SendClientMessageEx(playerid, COLOR_GRAD1, "That is not enough.");
  3118. return 1;
  3119. }
  3120. if(GetPlayerCash(playerid) < moneys)
  3121. {
  3122. SendClientMessageEx(playerid, COLOR_GRAD1, "You don't have that much money.");
  3123. return 1;
  3124. }
  3125. GivePlayerCash(playerid, -moneys);
  3126. arrGroupData[iGroupID][g_iBudget] += moneys;
  3127. new str[128];
  3128. format(str, sizeof(str), "%s has donated $%s to %s budget fund.", GetPlayerNameEx(playerid), number_format(moneys), arrGroupData[iGroupID][g_szGroupName]);
  3129. GroupPayLog(iGroupID, str);
  3130. SaveGroup(iGroupID);
  3131. OnPlayerStatsUpdate(playerid);
  3132. format(string, sizeof(string), "%s, you have donated $%s to your agency's budget.",GetPlayerNameEx(playerid), number_format(moneys));
  3133. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  3134. SendClientMessageEx(playerid, COLOR_GRAD1, string);
  3135. format(string, sizeof(string), "%s(%d) has donated $%s to %s's budget vault.",GetPlayerNameEx(playerid), GetPlayerSQLId(playerid), number_format(moneys), arrGroupData[iGroupID][g_szGroupName]);
  3136. Log("logs/pay.log", string);
  3137. return 1;
  3138. }
  3139. else
  3140. {
  3141. SendClientMessageEx(playerid, COLOR_GRAD2, "You're not in a government agency!");
  3142. }
  3143. }
  3144. else
  3145. {
  3146. SendClientMessageEx(playerid, COLOR_GRAD2, "You're not in a group.");
  3147. }
  3148. return 1;
  3149. }
  3150. CMD:dvtrackcar(playerid, params[])
  3151. {
  3152. new iGroupID = PlayerInfo[playerid][pMember];
  3153. if((0 <= iGroupID <= MAX_GROUPS))
  3154. {
  3155. new vstring[2500];
  3156. for(new i; i < MAX_DYNAMIC_VEHICLES; i++) {
  3157. new iModelID = DynVehicleInfo[i][gv_iModel];
  3158. if(400 <= iModelID < 612 && DynVehicleInfo[i][gv_igID] == iGroupID) {
  3159. if(DynVehicleInfo[i][gv_iDisabled] == 1) {
  3160. format(vstring, sizeof(vstring), "%s\n(%d)%s (Upkeep: $%s) (repo'd)", vstring, i, VehicleName[iModelID - 400], number_format(DynVehicleInfo[i][gv_iUpkeep]));
  3161. }
  3162. else if(DynVehicleInfo[i][gv_iDisabled] == 2) {
  3163. format(vstring, sizeof(vstring), "%s\n(%d)%s (Upkeep: $%s) (stored)", vstring, i, VehicleName[iModelID - 400], number_format(DynVehicleInfo[i][gv_iUpkeep]));
  3164. }
  3165. else if(DynVehicleInfo[i][gv_iSpawnedID] != INVALID_VEHICLE_ID) {
  3166. format(vstring, sizeof(vstring), "%s\n(%d) %s (Upkeep: $%s) (VID: %d)", vstring, i, VehicleName[iModelID - 400], number_format(DynVehicleInfo[i][gv_iUpkeep]), DynVehicleInfo[i][gv_iSpawnedID]);
  3167. }
  3168. }
  3169. }
  3170. ShowPlayerDialogEx(playerid, DV_TRACKCAR, DIALOG_STYLE_LIST, "Vehicle GPS Tracking", vstring, "Track", "Cancel");
  3171. }
  3172. return 1;
  3173. }
  3174. CMD:grepocars(playerid, params[])
  3175. {
  3176. new iGroupID = PlayerInfo[playerid][pMember], string[128];
  3177. if((0 <= iGroupID <= MAX_GROUPS) && PlayerInfo[playerid][pRank] == Group_GetMaxRank(iGroupID))
  3178. {
  3179. SendClientMessageEx(playerid, COLOR_GREEN, "Repossessed Agency Vehicles:");
  3180. SendClientMessageEx(playerid, COLOR_GRAD4, "NOTE: Type /gvbuyback to purchase these cars back when your agency can afford it.");
  3181. for(new iDvSlotID = 0; iDvSlotID < MAX_DYNAMIC_VEHICLES; iDvSlotID++)
  3182. {
  3183. if(DynVehicleInfo[iDvSlotID][gv_igID] != INVALID_GROUP_ID && DynVehicleInfo[iDvSlotID][gv_igID] == iGroupID)
  3184. {
  3185. if(DynVehicleInfo[iDvSlotID][gv_iModel] != 0 && (400 < DynVehicleInfo[iDvSlotID][gv_iModel] < 612))
  3186. {
  3187. if(DynVehicleInfo[iDvSlotID][gv_iDisabled] == 1)
  3188. {
  3189. format(string, sizeof(string), "Vehicle ID: %d - %s - Buyback Cost $%d.", iDvSlotID, VehicleName[DynVehicleInfo[iDvSlotID][gv_iModel] - 400], floatround(DynVehicleInfo[iDvSlotID][gv_iUpkeep] * 2), floatround(DynVehicleInfo[iDvSlotID][gv_iUpkeep] / 2));
  3190. SendClientMessageEx(playerid, COLOR_GRAD1, string);
  3191. }
  3192. }
  3193. }
  3194. }
  3195. }
  3196. else SendClientMessage(playerid, COLOR_GRAD2, " You're not authorized to use this command.");
  3197. return 1;
  3198. }
  3199. CMD:gvbuyback(playerid, params[])
  3200. {
  3201. new iVehicle[6];
  3202. new iGroupID = PlayerInfo[playerid][pLeader], string[128];
  3203. if((0 <= iGroupID <= MAX_GROUPS) && PlayerInfo[playerid][pRank] == Group_GetMaxRank(iGroupID))
  3204. {
  3205. if(sscanf(params, "s[6]", iVehicle)) {
  3206. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /gvbuyback [ID/all] *You may buy an individual car back, or all of your repo'd cars.");
  3207. return SendClientMessageEx(playerid, COLOR_GREY, "Note: ID is indicated under /grepocars");
  3208. }
  3209. if(strcmp(iVehicle, "all", true) == 0)
  3210. {
  3211. for(new iDvSlotID = 0; iDvSlotID < MAX_DYNAMIC_VEHICLES; iDvSlotID++)
  3212. {
  3213. if(DynVehicleInfo[iDvSlotID][gv_igID] != INVALID_GROUP_ID && DynVehicleInfo[iDvSlotID][gv_igID] == iGroupID)
  3214. {
  3215. if(DynVehicleInfo[iDvSlotID][gv_iModel] != 0 && (400 < DynVehicleInfo[iDvSlotID][gv_iModel] < 612))
  3216. {
  3217. if(DynVehicleInfo[iDvSlotID][gv_iDisabled] == 1)
  3218. {
  3219. if(arrGroupData[iGroupID][g_iBudget] > floatround(DynVehicleInfo[iDvSlotID][gv_iUpkeep] * 2))
  3220. {
  3221. arrGroupData[iGroupID][g_iBudget] -= floatround(DynVehicleInfo[iDvSlotID][gv_iUpkeep] * 2);
  3222. SaveGroup(iGroupID);
  3223. DynVehicleInfo[iDvSlotID][gv_iDisabled] = 0;
  3224. DynVeh_Save(iDvSlotID);
  3225. DynVeh_Spawn(iDvSlotID);
  3226. format(string, sizeof(string), "You have bought back your %s with ID %d for $%d", VehicleName[DynVehicleInfo[iDvSlotID][gv_iModel]-400], iDvSlotID, floatround(DynVehicleInfo[iDvSlotID][gv_iUpkeep] * 2));
  3227. SendClientMessageEx(playerid, COLOR_LIGHTBLUE, string);
  3228. new str[128];
  3229. format(str, sizeof(str), "Vehicle Slot ID %d buyback fee cost $%d to %s's budget fund.",iDvSlotID, floatround(DynVehicleInfo[iDvSlotID][gv_iUpkeep] * 2), arrGroupData[iGroupID][g_szGroupName]);
  3230. GroupPayLog(iGroupID, str);
  3231. }
  3232. else
  3233. {
  3234. format(string, sizeof(string), "Your agency could not afford to buy back your %s with ID %d for $%d", VehicleName[DynVehicleInfo[iDvSlotID][gv_iModel]-400], iDvSlotID, floatround(DynVehicleInfo[iDvSlotID][gv_iUpkeep] * 2));
  3235. SendClientMessageEx(playerid, COLOR_LIGHTBLUE, string);
  3236. return 1;
  3237. }
  3238. }
  3239. }
  3240. }
  3241. }
  3242. return 1;
  3243. }
  3244. else if((0 <= strval(iVehicle) <= MAX_DYNAMIC_VEHICLES))
  3245. {
  3246. new iDvSlotID = strval(iVehicle);
  3247. if(DynVehicleInfo[iDvSlotID][gv_iDisabled] == 1 && DynVehicleInfo[iDvSlotID][gv_igID] == iGroupID)
  3248. {
  3249. if(arrGroupData[iGroupID][g_iBudget] > floatround(DynVehicleInfo[iDvSlotID][gv_iUpkeep] * 2))
  3250. {
  3251. arrGroupData[iGroupID][g_iBudget] -= floatround(DynVehicleInfo[iDvSlotID][gv_iUpkeep] * 2);
  3252. SaveGroup(iGroupID);
  3253. DynVehicleInfo[iDvSlotID][gv_iDisabled] = 0;
  3254. DynVeh_Save(iDvSlotID);
  3255. DynVeh_Spawn(iDvSlotID);
  3256. format(string, sizeof(string), "You have bought back your %s with ID %d for $%d", VehicleName[DynVehicleInfo[iDvSlotID][gv_iModel]-400], iDvSlotID, floatround(DynVehicleInfo[iDvSlotID][gv_iUpkeep] * 2));
  3257. SendClientMessageEx(playerid, COLOR_LIGHTBLUE, string);
  3258. new str[128];
  3259. format(str, sizeof(str), "Vehicle Slot ID %d buyback fee cost $%d to %s's budget fund.",iDvSlotID, floatround(DynVehicleInfo[iDvSlotID][gv_iUpkeep] * 2), arrGroupData[iGroupID][g_szGroupName]);
  3260. GroupPayLog(iGroupID, str);
  3261. return 1;
  3262. }
  3263. else
  3264. {
  3265. format(string, sizeof(string), "Your agency could not afford to buy back your %s with ID %d for $%d", VehicleName[DynVehicleInfo[iDvSlotID][gv_iModel]-400], iDvSlotID, floatround(DynVehicleInfo[iDvSlotID][gv_iUpkeep] * 2));
  3266. SendClientMessageEx(playerid, COLOR_LIGHTBLUE, string);
  3267. return 1;
  3268. }
  3269. }
  3270. else return SendClientMessageEx(playerid, COLOR_LIGHTBLUE, "That car has either not been repossessed or does not belong to your agency.");
  3271. }
  3272. else SendClientMessageEx(playerid, COLOR_LIGHTBLUE, "Invalid ID");
  3273. }
  3274. else SendClientMessage(playerid, COLOR_GRAD2, " You're not authorized to use this command.");
  3275. return 1;
  3276. }
  3277. CMD:dvadjust(playerid, params[])
  3278. {
  3279. if(PlayerInfo[playerid][pMember] == INVALID_GROUP_ID) return SendClientMessageEx(playerid, COLOR_GREY, "You are not part of a group!");
  3280. if(PlayerInfo[playerid][pMember] != PlayerInfo[playerid][pLeader]) return SendClientMessageEx(playerid, COLOR_GREY, "You do not have leadership!");
  3281. new vehicleid, opt[5], rank;
  3282. if(sscanf(params, "ds[5]d", vehicleid, opt, rank))
  3283. {
  3284. SendClientMessageEx(playerid, COLOR_WHITE, "USAGE: /dvadjust [vehicle id] [rank/div] [value]");
  3285. SendClientMessageEx(playerid, COLOR_GREY, "NOTE: Use /dl to get the vehicle ID");
  3286. SendClientMessageEx(playerid, COLOR_GREY, "NOTE: Value of 0 = Disabled");
  3287. return 1;
  3288. }
  3289. new iDvSlotID = DynVeh[vehicleid];
  3290. if(iDvSlotID == -1 || iDvSlotID > MAX_DYNAMIC_VEHICLES || DynVehicleInfo[iDvSlotID][gv_iSpawnedID] != vehicleid) return SendClientMessageEx(playerid, COLOR_GRAD1, "Invalid dynamic vehicle ID provided!");
  3291. if(DynVehicleInfo[iDvSlotID][gv_igID] != PlayerInfo[playerid][pMember]) return SendClientMessageEx(playerid, COLOR_GRAD1, "This vehicle is not owned by your group!");
  3292. //if(DynVehicleInfo[iDvSlotID][gv_igID] != INVALID_GROUP_ID) return SendClientMessageEx(playerid, COLOR_GRAD1, "This Vehicle is owned by a faction!");
  3293. if(strcmp(opt, "rank", true) == 0)
  3294. {
  3295. if(rank > 9 || rank < 0) return SendClientMessageEx(playerid, COLOR_GREY, "Ranks can't go below 0 or above 9!");
  3296. DynVehicleInfo[iDvSlotID][gv_irID] = rank;
  3297. new string[128];
  3298. format(string, sizeof(string), "You have adjusted the rank of this vehicle to %s (%d).", arrGroupRanks[DynVehicleInfo[iDvSlotID][gv_igID]][DynVehicleInfo[iDvSlotID][gv_irID]], rank);
  3299. SendClientMessageEx(playerid, COLOR_WHITE, string);
  3300. format(string, sizeof(string), "%s has adjusted the rank to %s (%d) on DV Slot %d.", GetPlayerNameEx(playerid), arrGroupRanks[DynVehicleInfo[iDvSlotID][gv_igID]][DynVehicleInfo[iDvSlotID][gv_irID]], rank, iDvSlotID);
  3301. Log("logs/dv.log", string);
  3302. }
  3303. else if(strcmp(opt, "div", true) == 0)
  3304. {
  3305. if(rank > 9 || rank < 0) return SendClientMessageEx(playerid, COLOR_GREY, "Divisions can't go below 0 or above 9!");
  3306. DynVehicleInfo[iDvSlotID][gv_igDivID] = rank;
  3307. new string[128];
  3308. format(string, sizeof(string), "You have adjusted the division of this vehicle to %s (%d).", arrGroupDivisions[DynVehicleInfo[iDvSlotID][gv_igID]][rank - 1], rank);
  3309. SendClientMessageEx(playerid, COLOR_WHITE, string);
  3310. format(string, sizeof(string), "%s has adjusted the division to %s (%d) on DV Slot %d.", GetPlayerNameEx(playerid), arrGroupDivisions[DynVehicleInfo[iDvSlotID][gv_igID]][rank - 1], rank, iDvSlotID);
  3311. Log("logs/dv.log", string);
  3312. }
  3313. DynVeh_Save(iDvSlotID);
  3314. return 1;
  3315. }
  3316. CMD:dvpark(playerid, params[])
  3317. {
  3318. if(IsPlayerInAnyVehicle(playerid))
  3319. {
  3320. new vehicleid = GetPlayerVehicleID(playerid), iDvSlotID = DynVeh[vehicleid];
  3321. if(iDvSlotID == -1 || iDvSlotID > MAX_DYNAMIC_VEHICLES || DynVehicleInfo[iDvSlotID][gv_iSpawnedID] != vehicleid)
  3322. {
  3323. return SendClientMessageEx(playerid, COLOR_GRAD1, " Invalid Dynamic Vehicle ID Provided!" );
  3324. }
  3325. if(PlayerInfo[playerid][pAdmin] >= 4 || PlayerInfo[playerid][pASM] >= 1 || (PlayerInfo[playerid][pLeader] == DynVehicleInfo[iDvSlotID][gv_igID]) && DynVehicleInfo[iDvSlotID][gv_igID] != INVALID_GROUP_ID) {
  3326. GetVehiclePos(vehicleid, DynVehicleInfo[iDvSlotID][gv_fX], DynVehicleInfo[iDvSlotID][gv_fY], DynVehicleInfo[iDvSlotID][gv_fZ]);
  3327. GetVehicleZAngle(vehicleid, DynVehicleInfo[iDvSlotID][gv_fRotZ]);
  3328. DynVehicleInfo[iDvSlotID][gv_iVW] = GetPlayerVirtualWorld(playerid);
  3329. DynVehicleInfo[iDvSlotID][gv_iInt] = GetPlayerInterior(playerid);
  3330. DynVeh_Save(iDvSlotID);
  3331. DynVeh_Spawn(iDvSlotID);
  3332. }
  3333. else return SendClientMessageEx(playerid, COLOR_GREY, "You can't park this vehicle.");
  3334. }
  3335. return 1;
  3336. }
  3337. CMD:gotodv(playerid, params[])
  3338. {
  3339. if(PlayerInfo[playerid][pAdmin] >= 2)
  3340. {
  3341. new moneys;
  3342. if(sscanf(params, "i", moneys)) {
  3343. return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /gotodv [slot ID]");
  3344. }
  3345. if(DynVeh[DynVehicleInfo[moneys][gv_iSpawnedID]] != -1 && (0 <= moneys < MAX_DYNAMIC_VEHICLES))
  3346. {
  3347. new Float:cwx2,Float:cwy2,Float:cwz2;
  3348. GetVehiclePos(DynVehicleInfo[moneys][gv_iSpawnedID], cwx2, cwy2, cwz2);
  3349. if (GetPlayerState(playerid) == 2)
  3350. {
  3351. new tmpcar = GetPlayerVehicleID(playerid);
  3352. SetVehiclePos(tmpcar, cwx2, cwy2+1, cwz2);
  3353. SetPlayerVirtualWorld(playerid,GetVehicleVirtualWorld(DynVehicleInfo[moneys][gv_iSpawnedID]));
  3354. SetPlayerInterior(playerid, DynVehicleInfo[moneys][gv_iInt]);
  3355. fVehSpeed[playerid] = 0.0;
  3356. }
  3357. else
  3358. {
  3359. SetPlayerPos(playerid, cwx2, cwy2+1, cwz2);
  3360. SetPlayerVirtualWorld(playerid,GetVehicleVirtualWorld(DynVehicleInfo[moneys][gv_iSpawnedID]));
  3361. SetPlayerInterior(playerid, DynVehicleInfo[moneys][gv_iInt]);
  3362. }
  3363. SendClientMessageEx(playerid, COLOR_GRAD1, " You have been teleported!");
  3364. SetPlayerInterior(playerid, 0);
  3365. return 1;
  3366. }
  3367. else return SendClientMessage(playerid, COLOR_GRAD2, "That dynamic vehicle does not exist or is not spawned.");
  3368. }
  3369. else return SendClientMessage(playerid, COLOR_GRAD2, "You're not authorized to use this command.");
  3370. }
  3371. CMD:dvstatus(playerid, params[])
  3372. {
  3373. new iDvSlotID, vehicleid;
  3374. if(sscanf(params, "i", vehicleid))
  3375. {
  3376. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /dvstatus [vehicleid]");
  3377. return 1;
  3378. }
  3379. iDvSlotID = DynVeh[vehicleid];
  3380. if (PlayerInfo[playerid][pAdmin] >= 4 || PlayerInfo[playerid][pASM] >= 1 || PlayerInfo[playerid][pFactionModerator] >= 2)
  3381. {
  3382. if(iDvSlotID != -1)
  3383. {
  3384. new string[128];
  3385. format(string,sizeof(string),"|___________ Dynamic Vehicle Status (ID: %d | Slot ID: %d) ___________|", vehicleid, iDvSlotID);
  3386. SendClientMessageEx(playerid, COLOR_GREEN, string);
  3387. format(string, sizeof(string), "X: %f | Y: %f | Z: %f | Model: %d | Upkeep: $%d | Maxhealth: %f", DynVehicleInfo[iDvSlotID][gv_fX], DynVehicleInfo[iDvSlotID][gv_fY], DynVehicleInfo[iDvSlotID][gv_fZ], DynVehicleInfo[iDvSlotID][gv_iModel], DynVehicleInfo[iDvSlotID][gv_iUpkeep], DynVehicleInfo[iDvSlotID][gv_fMaxHealth]);
  3388. SendClientMessageEx(playerid, COLOR_WHITE, string);
  3389. format(string, sizeof(string), "Group: %d | Division: %d | Rank: %d | Type: %d | VW: %d | Int: %d | Disabled: %d", DynVehicleInfo[iDvSlotID][gv_igID], DynVehicleInfo[iDvSlotID][gv_igDivID], DynVehicleInfo[iDvSlotID][gv_irID], DynVehicleInfo[iDvSlotID][gv_iType], DynVehicleInfo[iDvSlotID][gv_iVW], DynVehicleInfo[iDvSlotID][gv_iInt], DynVehicleInfo[iDvSlotID][gv_iDisabled]);
  3390. SendClientMessageEx(playerid, COLOR_WHITE, string);
  3391. format(string, sizeof(string), "Obj Model 1: %d | Obj Model 2: %d | Obj Model 3: %d | Obj Model 4: %d | LoadMax: %d | Siren: %d", DynVehicleObjInfo[iDvSlotID][0][gv_iAttachedObjectModel], DynVehicleObjInfo[iDvSlotID][1][gv_iAttachedObjectModel], DynVehicleObjInfo[iDvSlotID][2][gv_iAttachedObjectModel], DynVehicleObjInfo[iDvSlotID][3][gv_iAttachedObjectModel], DynVehicleInfo[iDvSlotID][gv_iLoadMax], DynVehicleInfo[iDvSlotID][gv_iSiren]);
  3392. SendClientMessageEx(playerid, COLOR_WHITE, string);
  3393. }
  3394. else return SendClientMessageEx(playerid, COLOR_GRAD1, "Invalid Dynamic Vehicle Slot ID.");
  3395. }
  3396. else
  3397. {
  3398. SendClientMessageEx(playerid, COLOR_GRAD1, "You are not authorized to use that command.");
  3399. }
  3400. return 1;
  3401. }
  3402. CMD:dvcreate(playerid, params[])
  3403. {
  3404. if(PlayerInfo[playerid][pAdmin] >= 4 || PlayerInfo[playerid][pASM] >= 1 || PlayerInfo[playerid][pFactionModerator] >= 2 || PlayerInfo[playerid][pGangModerator] >= 2)
  3405. {
  3406. new
  3407. iVehicle,
  3408. iColors[2],
  3409. string[128];
  3410. if(sscanf(params, "iii", iVehicle, iColors[0], iColors[1])) {
  3411. return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /dvcreate [model ID] [color 1] [color 2]");
  3412. }
  3413. if(!(400 < iVehicle < 612)) return SendClientMessage(playerid, COLOR_GRAD2, "Invalid Model ID");
  3414. else if(IsATrain(iVehicle)) {
  3415. SendClientMessageEx(playerid, COLOR_GREY, "Trains cannot be spawned during runtime.");
  3416. }
  3417. else if(!(0 <= iColors[0] <= 255 && 0 <= iColors[1] <= 255)) {
  3418. SendClientMessageEx(playerid, COLOR_GRAD2, "Invalid color specified (IDs start at 0, and end at 255).");
  3419. }
  3420. mysql_tquery(MainPipeline, "SELECT id from `groupvehs` WHERE vModel = 0 LIMIT 1;", "DynVeh_CreateDVQuery", "iiii", playerid, iVehicle, iColors[0], iColors[1]);
  3421. format(string, sizeof(string), "%s has created a dynamic vehicle.", GetPlayerNameEx(playerid));
  3422. Log("logs/dv.log", string);
  3423. }
  3424. else return SendClientMessage(playerid, COLOR_GRAD2, "You're not authorized to use this command.");
  3425. return 1;
  3426. }
  3427. CMD:dvrespawnall(playerid, params[])
  3428. {
  3429. if(PlayerInfo[playerid][pAdmin] >= 1337)
  3430. {
  3431. if(GetPVarInt(playerid, "dvRespawnAll") == 0)
  3432. {
  3433. new
  3434. szString[128];
  3435. SendClientMessageEx(playerid, COLOR_WHITE, "Respawning all current dynamic vehicles...");
  3436. for(new i = 0; i < MAX_DYNAMIC_VEHICLES; i++)
  3437. {
  3438. SetPVarInt(playerid, "dvRespawnAll", 1);
  3439. DynVeh_Spawn(i);
  3440. }
  3441. format(szString, sizeof(szString), "{AA3333}AdmWarning{FFFF00}: %s has respawned all dynamic vehicles loaded on the server.", GetPlayerNameEx(playerid));
  3442. ABroadCast(COLOR_YELLOW, szString, 2);
  3443. format(szString, sizeof(szString), "Administrator %s has respawned all dynamic vehicles loaded on the server.", GetPlayerNameEx(playerid));
  3444. Log("logs/admin.log", szString);
  3445. SetPVarInt(playerid, "dvRespawnAll", 0);
  3446. }
  3447. else
  3448. return SendClientMessageEx(playerid, COLOR_GREY, "There is already a dynamic vehicle respawn request in progress.");
  3449. }
  3450. else return SendClientMessageEx(playerid, COLOR_GREY, "You're not authorized to use this command!");
  3451. return 1;
  3452. }
  3453. CMD:freedvrespawn(playerid, params[]) return cmd_dvrespawn(playerid, "1");
  3454. CMD:dvrespawn(playerid, params[])
  3455. {
  3456. new szString[128],
  3457. iGroupID = PlayerInfo[playerid][pMember];
  3458. if(PlayerInfo[playerid][pAdmin] >= 4 || PlayerInfo[playerid][pASM] >= 1 || PlayerInfo[playerid][pFactionModerator] >= 1 || PlayerInfo[playerid][pGangModerator] >= 1)
  3459. {
  3460. if((0 <= iGroupID <= MAX_GROUPS))
  3461. {
  3462. for(new i; i < MAX_DYNAMIC_VEHICLES; i++)
  3463. {
  3464. new iModelID = DynVehicleInfo[i][gv_iModel];
  3465. if(400 <= iModelID < 612 && DynVehicleInfo[i][gv_igID] == iGroupID)
  3466. {
  3467. if(!IsVehicleOccupied(DynVehicleInfo[i][gv_iSpawnedID]))
  3468. {
  3469. if(strval(params) == 1) DynVeh_Spawn(i, 1); else DynVeh_Spawn(i);
  3470. }
  3471. }
  3472. }
  3473. format(szString, sizeof(szString), "** Respawning all dynamic group vehicles%s...",(strval(params) == 1)?(" at no charge"):(""));
  3474. foreach(new i: Player)
  3475. {
  3476. if(PlayerInfo[i][pMember] == iGroupID)
  3477. {
  3478. SendClientMessageEx(i, arrGroupData[iGroupID][g_hRadioColour] * 256 + 255, szString);
  3479. }
  3480. }
  3481. format(szString, sizeof(szString), "%s has respawned group ID %d dynamic group vehicles.", GetPlayerNameEx(playerid), iGroupID+1);
  3482. Log("logs/group.log", szString);
  3483. }
  3484. }
  3485. return 1;
  3486. }
  3487. CMD:dvedit(playerid, params[])
  3488. {
  3489. if(PlayerInfo[playerid][pAdmin] >= 4 || PlayerInfo[playerid][pASM] >= 1 || PlayerInfo[playerid][pFactionModerator] >= 2 || PlayerInfo[playerid][pGangModerator] >= 2)
  3490. {
  3491. new vehicleid, name[24], Float:value, slot;
  3492. if(sscanf(params, "is[24]F(0)D(0)", vehicleid, name, value, slot))
  3493. {
  3494. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /dvedit [vehicleid] [v parameter] [value] [slot] (if applicable - indicated by *)");
  3495. SendClientMessageEx(playerid, COLOR_GREY, "Parameters: vmodel vcol1 vcol2 groupid divid loadmax maxhealth upkeep vtype vw delete");
  3496. SendClientMessageEx(playerid, COLOR_GREY, "Parameters: disabled rank siren objmodel* objx* objy* objz* objrx* objry* objrz*");
  3497. SendClientMessageEx(playerid, COLOR_GREY, "Parameters: objmatsize* objsize* (Object Offsets)");
  3498. return 1;
  3499. }
  3500. new iDvSlotID = DynVeh[vehicleid];
  3501. if(iDvSlotID == -1 || iDvSlotID > MAX_DYNAMIC_VEHICLES || DynVehicleInfo[iDvSlotID][gv_iSpawnedID] != vehicleid) return SendClientMessageEx(playerid, COLOR_GRAD1, "Invalid Dynamic Vehicle ID provided!" );
  3502. EditDV(playerid, iDvSlotID, params, name, value, slot);
  3503. }
  3504. else return SendClientMessage(playerid, COLOR_GRAD2, "You're not authorized to use this command.");
  3505. return 1;
  3506. }
  3507. CMD:dveditslot(playerid, params[])
  3508. {
  3509. if(PlayerInfo[playerid][pAdmin] >= 4 || PlayerInfo[playerid][pASM] >= 1 || PlayerInfo[playerid][pFactionModerator] >= 2 || PlayerInfo[playerid][pGangModerator] >= 2)
  3510. {
  3511. new iDvSlotID, name[24], Float:value, slot;
  3512. if(sscanf(params, "is[24]F(0)D(0)", iDvSlotID, name, value, slot)) {
  3513. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /dveditslot [dv slot id] [v parameter] [value] [slot] (if applicable - indicated by *)");
  3514. SendClientMessageEx(playerid, COLOR_GREY, "Parameters: vmodel vcol1 vcol2 groupid divid loadmax maxhealth upkeep vtype vw delete");
  3515. SendClientMessageEx(playerid, COLOR_GREY, "Parameters: disabled rank siren objmodel* objx* objy* objz* objrx* objry* objrz*");
  3516. SendClientMessageEx(playerid, COLOR_GREY, "Parameters: objmatsize* objsize* (Object Offsets)");
  3517. return 1;
  3518. }
  3519. if(iDvSlotID > MAX_DYNAMIC_VEHICLES || DynVehicleInfo[iDvSlotID][gv_iModel] == 0) return SendClientMessageEx(playerid, COLOR_GRAD1, "Invalid Dynamic Vehicle ID provided!" );
  3520. EditDV(playerid, iDvSlotID, params, name, value, slot);
  3521. }
  3522. else return SendClientMessage(playerid, COLOR_GRAD2, "You're not authorized to use this command.");
  3523. return 1;
  3524. }
  3525. CMD:dvtextobj(playerid, params[])
  3526. {
  3527. if(PlayerInfo[playerid][pAdmin] >= 4 || PlayerInfo[playerid][pASM] >= 1 || PlayerInfo[playerid][pFactionModerator] >= 2 || PlayerInfo[playerid][pGangModerator] >= 2)
  3528. {
  3529. new vehicleid, name[24], value[32], slot, string[128];
  3530. if(sscanf(params, "ids[8]s[32]", vehicleid, slot, name, value)) return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /dvtextobj [vehicleid] [object slot] [text/font/color/bgcolor] [value]");
  3531. new iDvSlotID = DynVeh[vehicleid];
  3532. if(iDvSlotID == -1 || iDvSlotID > MAX_DYNAMIC_VEHICLES || DynVehicleInfo[iDvSlotID][gv_iSpawnedID] != vehicleid) return SendClientMessageEx(playerid, COLOR_GRAD1, " Invalid Dynamic Vehicle ID Provided " );
  3533. format(string, sizeof(string), "%s has edited DV Slot %d - %s.", GetPlayerNameEx(playerid), iDvSlotID, params);
  3534. Log("logs/dv.log", string);
  3535. if(1 <= slot <= MAX_DV_OBJECTS)
  3536. {
  3537. if(DynVehicleObjInfo[iDvSlotID][slot-1][gv_iAttachedObjectModel] == INVALID_OBJECT_ID || !IsABlankTexture(DynVehicleObjInfo[iDvSlotID][slot-1][gv_iAttachedObjectModel])) return SendClientMessageEx(playerid, COLOR_GREY, "The object slot given is not valid with this command!");
  3538. if(strcmp(name, "text", true) == 0)
  3539. {
  3540. format(DynVehicleObjInfo[iDvSlotID][slot-1][gv_fObjectText], 32, "%s", value);
  3541. DynVeh_Spawn(iDvSlotID);
  3542. DynVeh_Save(iDvSlotID);
  3543. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the object text of the dynamic vehicle");
  3544. return 1;
  3545. }
  3546. if(strcmp(name, "font", true) == 0)
  3547. {
  3548. format(DynVehicleObjInfo[iDvSlotID][slot-1][gv_fObjectFont], 32, "%s", value);
  3549. DynVeh_Spawn(iDvSlotID);
  3550. DynVeh_Save(iDvSlotID);
  3551. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the object font face of the dynamic vehicle");
  3552. return 1;
  3553. }
  3554. if(strcmp(name, "color", true) == 0)
  3555. {
  3556. sscanf(value, "h", DynVehicleObjInfo[iDvSlotID][slot-1][gv_fObjectColor]);
  3557. DynVeh_Spawn(iDvSlotID);
  3558. DynVeh_Save(iDvSlotID);
  3559. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the object text color of the dynamic vehicle");
  3560. return 1;
  3561. }
  3562. if(strcmp(name, "bgcolor", true) == 0)
  3563. {
  3564. sscanf(value, "h", DynVehicleObjInfo[iDvSlotID][slot-1][gv_fObjectBGColor]);
  3565. DynVeh_Spawn(iDvSlotID);
  3566. DynVeh_Save(iDvSlotID);
  3567. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the object background color of the dynamic vehicle");
  3568. return 1;
  3569. }
  3570. }
  3571. else return SendClientMessageEx(playerid, COLOR_GRAD2, "Slot ID Must be between 1 and "#MAX_DV_OBJECTS"!");
  3572. }
  3573. else return SendClientMessage(playerid, COLOR_GRAD2, "You're not authorized to use this command.");
  3574. return 1;
  3575. }
  3576. CMD:dvplate(playerid, params[])
  3577. {
  3578. if(PlayerInfo[playerid][pAdmin] >= 4 || PlayerInfo[playerid][pASM] >= 1 || PlayerInfo[playerid][pFactionModerator] >= 2 || PlayerInfo[playerid][pGangModerator] >= 2)
  3579. {
  3580. new vehicleid, plate[32];
  3581. if(sscanf(params, "ds[32]", vehicleid, plate))
  3582. {
  3583. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /dvplate [vehicleid] [plate/remove]");
  3584. SendClientMessageEx(playerid, COLOR_GREY, "COLORS: (black/white/blue/red/green/purple/yellow/lightblue/navy/beige/darkgreen/darkblue/darkgrey/gold/brown/darkbrown/darkred");
  3585. SendClientMessageEx(playerid, COLOR_GREY, "/pink) USAGE: (red)Hi(white)how are you? NOTE: Each color counts for 8 characters");
  3586. return 1;
  3587. }
  3588. new iDvSlotID = DynVeh[vehicleid];
  3589. if(iDvSlotID == -1 || iDvSlotID > MAX_DYNAMIC_VEHICLES || DynVehicleInfo[iDvSlotID][gv_iSpawnedID] != vehicleid) return SendClientMessageEx(playerid, COLOR_GRAD1, "Invalid Dynamic Vehicle ID provided!");
  3590. format(plate, sizeof(plate), "%s", str_replace("(black)", "{000000}", plate));
  3591. format(plate, sizeof(plate), "%s", str_replace("(white)", "{FFFFFF}", plate));
  3592. format(plate, sizeof(plate), "%s", str_replace("(blue)", "{0000FF}", plate));
  3593. format(plate, sizeof(plate), "%s", str_replace("(red)", "{FF0000}", plate));
  3594. format(plate, sizeof(plate), "%s", str_replace("(green)", "{008000}", plate));
  3595. format(plate, sizeof(plate), "%s", str_replace("(purple)", "{800080}", plate));
  3596. format(plate, sizeof(plate), "%s", str_replace("(yellow)", "{FFFF00}", plate));
  3597. format(plate, sizeof(plate), "%s", str_replace("(lightblue)", "{ADD8E6}", plate));
  3598. format(plate, sizeof(plate), "%s", str_replace("(navy)", "{000080}", plate));
  3599. format(plate, sizeof(plate), "%s", str_replace("(beige)", "{F5F5DC}", plate));
  3600. format(plate, sizeof(plate), "%s", str_replace("(darkgreen)", "{006400}", plate));
  3601. format(plate, sizeof(plate), "%s", str_replace("(darkblue)", "{00008B}", plate));
  3602. format(plate, sizeof(plate), "%s", str_replace("(darkgrey)", "{A9A9A9}", plate));
  3603. format(plate, sizeof(plate), "%s", str_replace("(gold)", "{FFD700}", plate));
  3604. format(plate, sizeof(plate), "%s", str_replace("(brown)", "{A52A2A}", plate));
  3605. format(plate, sizeof(plate), "%s", str_replace("(darkbrown)", "{5C4033}", plate));
  3606. format(plate, sizeof(plate), "%s", str_replace("(darkred)", "{8B0000}", plate));
  3607. format(plate, sizeof(plate), "%s", str_replace("(pink)", "{FF5B77}", plate));
  3608. if(strcmp(plate, "remove", true) == 0)
  3609. {
  3610. DynVehicleInfo[iDvSlotID][gv_iPlate] = 0;
  3611. SendClientMessageEx(playerid, COLOR_WHITE, "You have removed the custom plate of the dynamic vehicle");
  3612. }
  3613. else
  3614. {
  3615. format(DynVehicleInfo[iDvSlotID][gv_iPlate], 32, "%s", plate);
  3616. DynVeh_Spawn(iDvSlotID);
  3617. SendClientMessageEx(playerid, COLOR_WHITE, "You have modified the custom plate of the dynamic vehicle");
  3618. }
  3619. DynVeh_Save(iDvSlotID);
  3620. }
  3621. else
  3622. {
  3623. SendClientMessageEx(playerid, COLOR_GRAD1, "You are not authorized to use that command.");
  3624. }
  3625. return 1;
  3626. }
  3627. CMD:siren(playerid, params[])
  3628. {
  3629. if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
  3630. {
  3631. if(IsACop(playerid) || IsAHitman(playerid) || IsAGovernment(playerid) || IsAMedic(playerid))
  3632. {
  3633. if(GetGVarType("VehSiren", GetPlayerVehicleID(playerid))) ToggleSiren(GetPlayerVehicleID(playerid), 1);
  3634. else ToggleSiren(GetPlayerVehicleID(playerid), 0);
  3635. }
  3636. if(DynVeh[GetPlayerVehicleID(playerid)] != -1)
  3637. {
  3638. for(new i = 0; i != MAX_DV_OBJECTS; i++)
  3639. {
  3640. switch(DynVehicleObjInfo[DynVeh[GetPlayerVehicleID(playerid)]][i][gv_iAttachedObjectModel])
  3641. {
  3642. case 1899, 19300, 19420: ToggleDVSiren(DynVeh[GetPlayerVehicleID(playerid)], i, 1);
  3643. case 18646, 19294, 19419: ToggleDVSiren(DynVeh[GetPlayerVehicleID(playerid)], i, 0);
  3644. }
  3645. }
  3646. }
  3647. }
  3648. return 1;
  3649. }
  3650. CMD:deploy(playerid, params[])
  3651. {
  3652. if(PlayerInfo[playerid][pMember] != INVALID_GROUP_ID)
  3653. {
  3654. if(PlayerInfo[playerid][pJailTime] > 0) return SendClientMessageEx(playerid, COLOR_WHITE, "You cannot do this right now.");
  3655. if(GetPVarType(playerid, "IsInArena")) return SendClientMessageEx(playerid, COLOR_WHITE, "You can't do this right now, you are in an arena!");
  3656. new type, object[12], string[128];
  3657. if(sscanf(params, "s[12]D(0)", object, type))
  3658. {
  3659. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /deploy [object] [type (option for barricades/signs)]");
  3660. SendClientMessageEx(playerid, COLOR_GRAD1, "Objects: Cade, Spikes, Flare, Cone, Barrel, Ladder, Sign, Tape");
  3661. return 1;
  3662. }
  3663. else if(IsPlayerInAnyVehicle(playerid)) return SendClientMessageEx(playerid, COLOR_GREY, "You must be on foot to use this command.");
  3664. new iGroup = PlayerInfo[playerid][pMember];
  3665. if(strcmp(object, "cade", true) == 0) {
  3666. if(PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iBarricades]) {
  3667. new aCades[12] = {981, 4504, 4505, 4514, 4526, 978, 979, 3091, 1459, 1423, 1424, 981};
  3668. ShowModelSelectionMenuEx(playerid, aCades, sizeof(aCades), "Cades", 1500, -16.0, 0.0, -55.0);
  3669. }
  3670. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  3671. }
  3672. else if(strcmp(object, "spikes", true) == 0)
  3673. {
  3674. if(PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iSpikeStrips])
  3675. {
  3676. for(new i; i < MAX_SPIKES; i++)
  3677. {
  3678. if(SpikeStrips[iGroup][i][sX] == 0 && SpikeStrips[iGroup][i][sY] == 0 && SpikeStrips[iGroup][i][sZ] == 0)
  3679. {
  3680. new Float: f_TempAngle;
  3681. GetPlayerPos(playerid, SpikeStrips[iGroup][i][sX], SpikeStrips[iGroup][i][sY], SpikeStrips[iGroup][i][sZ]);
  3682. GetPlayerFacingAngle(playerid, f_TempAngle);
  3683. SpikeStrips[iGroup][i][sObjectID] = CreateDynamicObject(2899, SpikeStrips[iGroup][i][sX], SpikeStrips[iGroup][i][sY], SpikeStrips[iGroup][i][sZ]-0.8, 0.0, 0.0, f_TempAngle);
  3684. SpikeStrips[iGroup][i][sPickupID] = CreateDynamicPickup(19300, 14, SpikeStrips[iGroup][i][sX], SpikeStrips[iGroup][i][sY], SpikeStrips[iGroup][i][sZ]);
  3685. GetPlayer3DZone(playerid, SpikeStrips[iGroup][i][sDeployedAt], MAX_ZONE_NAME);
  3686. SpikeStrips[iGroup][i][sDeployedBy] = GetPlayerNameEx(playerid);
  3687. if(PlayerInfo[playerid][pAdmin] > 1 && PlayerInfo[playerid][pTogReports] != 1) SpikeStrips[iGroup][i][sDeployedByStatus] = 1;
  3688. else SpikeStrips[iGroup][i][sDeployedByStatus] = 0;
  3689. format(string,sizeof(string),"Spike ID: %d successfully created.", i);
  3690. SendClientMessageEx(playerid, COLOR_WHITE, string);
  3691. /*format(string, sizeof(string), "** HQ: A spike has been deployed by %s at %s **", GetPlayerNameEx(playerid), SpikeStrips[iGroup][i][sDeployedAt]);
  3692. foreach(new x: Player)
  3693. {
  3694. if(PlayerInfo[x][pToggledChats][12] == 0)
  3695. {
  3696. if(PlayerInfo[x][pMember] == iGroup) SendClientMessageEx(x, arrGroupData[iGroup][g_hRadioColour] * 256 + 255, string);
  3697. if(GetPVarInt(x, "BigEar") == 4 && GetPVarInt(x, "BigEarGroup") == iGroup)
  3698. {
  3699. new szBigEar[128];
  3700. format(szBigEar, sizeof(szBigEar), "(BE) %s", string);
  3701. SendClientMessageEx(x, arrGroupData[iGroup][g_hRadioColour] * 256 + 255, szBigEar);
  3702. }
  3703. }
  3704. }*/
  3705. return 1;
  3706. }
  3707. }
  3708. SendClientMessageEx(playerid, COLOR_WHITE, "Unable to spawn more spike strips, limit is " #MAX_SPIKES# ".");
  3709. }
  3710. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  3711. }
  3712. else if(strcmp(object, "flare", true) == 0)
  3713. {
  3714. if(PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iFlares])
  3715. {
  3716. for(new i; i < MAX_FLARES; i++)
  3717. {
  3718. if(Flares[iGroup][i][sX] == 0 && Flares[iGroup][i][sY] == 0 && Flares[iGroup][i][sZ] == 0)
  3719. {
  3720. new Float: f_TempAngle;
  3721. GetPlayerPos(playerid, Flares[iGroup][i][sX], Flares[iGroup][i][sY], Flares[iGroup][i][sZ]);
  3722. GetPlayerFacingAngle(playerid, f_TempAngle);
  3723. Flares[iGroup][i][sObjectID] = CreateDynamicObject(18728, Flares[iGroup][i][sX], Flares[iGroup][i][sY], Flares[iGroup][i][sZ]-2.4, 0.0, 0.0, f_TempAngle);
  3724. GetPlayer3DZone(playerid, Flares[iGroup][i][sDeployedAt], MAX_ZONE_NAME);
  3725. Flares[iGroup][i][sDeployedBy] = GetPlayerNameEx(playerid);
  3726. if(PlayerInfo[playerid][pAdmin] > 1 && PlayerInfo[playerid][pTogReports] != 1) Flares[iGroup][i][sDeployedByStatus] = 1;
  3727. else Flares[iGroup][i][sDeployedByStatus] = 0;
  3728. format(string,sizeof(string),"Flare ID: %d successfully created.", i);
  3729. SendClientMessageEx(playerid, COLOR_WHITE, string);
  3730. return 1;
  3731. }
  3732. }
  3733. SendClientMessageEx(playerid, COLOR_WHITE, "Unable to spawn more flares, limit is " #MAX_FLARES# ".");
  3734. }
  3735. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  3736. }
  3737. else if(strcmp(object, "cone", true) == 0)
  3738. {
  3739. if(PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iCones])
  3740. {
  3741. for(new i; i < MAX_CONES; i++)
  3742. {
  3743. if(Cones[iGroup][i][sX] == 0 && Cones[iGroup][i][sY] == 0 && Cones[iGroup][i][sZ] == 0)
  3744. {
  3745. new Float: f_TempAngle;
  3746. GetPlayerPos(playerid, Cones[iGroup][i][sX], Cones[iGroup][i][sY], Cones[iGroup][i][sZ]);
  3747. GetPlayerFacingAngle(playerid, f_TempAngle);
  3748. Cones[iGroup][i][sObjectID] = CreateDynamicObject(1238, Cones[iGroup][i][sX], Cones[iGroup][i][sY], Cones[iGroup][i][sZ]-0.7, 0.0, 0.0, f_TempAngle);
  3749. GetPlayer3DZone(playerid, Cones[iGroup][i][sDeployedAt], MAX_ZONE_NAME);
  3750. Cones[iGroup][i][sDeployedBy] = GetPlayerNameEx(playerid);
  3751. if(PlayerInfo[playerid][pAdmin] > 1 && PlayerInfo[playerid][pTogReports] != 1) Cones[iGroup][i][sDeployedByStatus] = 1;
  3752. else Cones[iGroup][i][sDeployedByStatus] = 0;
  3753. format(string,sizeof(string),"Cone ID: %d successfully created.", i);
  3754. SendClientMessageEx(playerid, COLOR_WHITE, string);
  3755. return 1;
  3756. }
  3757. }
  3758. SendClientMessageEx(playerid, COLOR_WHITE, "Unable to spawn more cones, limit is " #MAX_CONES# ".");
  3759. }
  3760. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  3761. }
  3762. else if(strcmp(object, "barrel", true) == 0)
  3763. {
  3764. if(PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iBarrels])
  3765. {
  3766. for(new i; i < MAX_BARRELS; i++)
  3767. {
  3768. if(Barrels[iGroup][i][sX] == 0 && Barrels[iGroup][i][sY] == 0 && Barrels[iGroup][i][sZ] == 0)
  3769. {
  3770. new Float: f_TempAngle;
  3771. GetPlayerPos(playerid, Barrels[iGroup][i][sX], Barrels[iGroup][i][sY], Barrels[iGroup][i][sZ]);
  3772. GetPlayerFacingAngle(playerid, f_TempAngle);
  3773. Barrels[iGroup][i][sObjectID] = CreateDynamicObject(1237, Barrels[iGroup][i][sX], Barrels[iGroup][i][sY], Barrels[iGroup][i][sZ]-1, 0.0, 0.0, f_TempAngle);
  3774. GetPlayer3DZone(playerid, Barrels[iGroup][i][sDeployedAt], MAX_ZONE_NAME);
  3775. Barrels[iGroup][i][sDeployedBy] = GetPlayerNameEx(playerid);
  3776. if(PlayerInfo[playerid][pAdmin] > 1 && PlayerInfo[playerid][pTogReports] != 1) Barrels[iGroup][i][sDeployedByStatus] = 1;
  3777. else Barrels[iGroup][i][sDeployedByStatus] = 0;
  3778. format(string,sizeof(string),"Barrel ID: %d successfully created.", i);
  3779. SendClientMessageEx(playerid, COLOR_WHITE, string);
  3780. return 1;
  3781. }
  3782. }
  3783. SendClientMessageEx(playerid, COLOR_WHITE, "Unable to spawn more barrels limit is " #MAX_BARRELS# ".");
  3784. }
  3785. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  3786. }
  3787. else if(strcmp(object, "ladder", true) == 0)
  3788. {
  3789. if(PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iLadders])
  3790. {
  3791. for(new i; i < MAX_LADDERS; i++)
  3792. {
  3793. if(Ladders[iGroup][i][sX] == 0 && Ladders[iGroup][i][sY] == 0 && Ladders[iGroup][i][sZ] == 0)
  3794. {
  3795. new Float: f_TempAngle;
  3796. GetPlayerPos(playerid, Ladders[iGroup][i][sX], Ladders[iGroup][i][sY], Ladders[iGroup][i][sZ]);
  3797. GetPlayerFacingAngle(playerid, f_TempAngle);
  3798. Ladders[iGroup][i][sObjectID] = CreateDynamicObject(1437, Ladders[iGroup][i][sX], Ladders[iGroup][i][sY], Ladders[iGroup][i][sZ] + 0.20, 340.0, 0.0, f_TempAngle);
  3799. GetPlayer3DZone(playerid, Ladders[iGroup][i][sDeployedAt], MAX_ZONE_NAME);
  3800. SetPlayerPos(playerid, Ladders[iGroup][i][sX], Ladders[iGroup][i][sY], Ladders[iGroup][i][sZ] + 0.50);
  3801. Ladders[iGroup][i][sDeployedBy] = GetPlayerNameEx(playerid);
  3802. if(PlayerInfo[playerid][pAdmin] > 1 && PlayerInfo[playerid][pTogReports] != 1) Ladders[iGroup][i][sDeployedByStatus] = 1;
  3803. else Ladders[iGroup][i][sDeployedByStatus] = 0;
  3804. format(string,sizeof(string),"Ladder ID: %d successfully created.", i);
  3805. SendClientMessageEx(playerid, COLOR_WHITE, string);
  3806. return 1;
  3807. }
  3808. }
  3809. SendClientMessageEx(playerid, COLOR_WHITE, "Unable to spawn more ladders, limit is " #MAX_LADDERS# ".");
  3810. }
  3811. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  3812. }
  3813. else if(strcmp(object, "sign", true) == 0)
  3814. {
  3815. if(PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iCones])
  3816. {
  3817. for(new i; i < MAX_SIGNS; i++)
  3818. {
  3819. if(Signs[iGroup][i][sX] == 0 && Signs[iGroup][i][sY] == 0 && Signs[iGroup][i][sZ] == 0)
  3820. {
  3821. new Float: f_TempAngle;
  3822. GetPlayerPos(playerid, Signs[iGroup][i][sX], Signs[iGroup][i][sY], Signs[iGroup][i][sZ]);
  3823. GetPlayerFacingAngle(playerid, f_TempAngle);
  3824. switch(type)
  3825. {
  3826. case 0:
  3827. {
  3828. Signs[iGroup][i][sObjectID] = CreateDynamicObject(19966, Signs[iGroup][i][sX], Signs[iGroup][i][sY], Signs[iGroup][i][sZ] - 1.0, 0.0, 0.0, f_TempAngle);
  3829. SetPlayerPos(playerid, Signs[iGroup][i][sX] + 1, Signs[iGroup][i][sY] + 1, Signs[iGroup][i][sZ]);
  3830. }
  3831. case 1:
  3832. {
  3833. Signs[iGroup][i][sObjectID] = CreateDynamicObject(19976, Signs[iGroup][i][sX], Signs[iGroup][i][sY], Signs[iGroup][i][sZ] - 1.0, 0.0, 0.0, f_TempAngle);
  3834. SetPlayerPos(playerid, Signs[iGroup][i][sX] + 1, Signs[iGroup][i][sY] + 1, Signs[iGroup][i][sZ]);
  3835. }
  3836. case 2:
  3837. {
  3838. Signs[iGroup][i][sObjectID] = CreateDynamicObject(19967, Signs[iGroup][i][sX], Signs[iGroup][i][sY], Signs[iGroup][i][sZ] - 1.0, 0.0, 0.0, f_TempAngle);
  3839. SetPlayerPos(playerid, Signs[iGroup][i][sX] + 1, Signs[iGroup][i][sY] + 1, Signs[iGroup][i][sZ]);
  3840. }
  3841. case 3:
  3842. {
  3843. Signs[iGroup][i][sObjectID] = CreateDynamicObject(19972, Signs[iGroup][i][sX], Signs[iGroup][i][sY], Signs[iGroup][i][sZ] - 1.0, 0.0, 0.0, f_TempAngle);
  3844. SetPlayerPos(playerid, Signs[iGroup][i][sX] + 1, Signs[iGroup][i][sY] + 1, Signs[iGroup][i][sZ]);
  3845. }
  3846. case 4:
  3847. {
  3848. Signs[iGroup][i][sObjectID] = CreateDynamicObject(19975, Signs[iGroup][i][sX], Signs[iGroup][i][sY], Signs[iGroup][i][sZ] - 1.0, 0.0, 0.0, f_TempAngle);
  3849. SetPlayerPos(playerid, Signs[iGroup][i][sX] + 1, Signs[iGroup][i][sY] + 1, Signs[iGroup][i][sZ]);
  3850. }
  3851. case 5:
  3852. {
  3853. Signs[iGroup][i][sObjectID] = CreateDynamicObject(19973, Signs[iGroup][i][sX], Signs[iGroup][i][sY], Signs[iGroup][i][sZ] - 1.0, 0.0, 0.0, f_TempAngle);
  3854. SetPlayerPos(playerid, Signs[iGroup][i][sX] + 1, Signs[iGroup][i][sY] + 1, Signs[iGroup][i][sZ]);
  3855. }
  3856. case 6:
  3857. {
  3858. Signs[iGroup][i][sObjectID] = CreateDynamicObject(19974, Signs[iGroup][i][sX], Signs[iGroup][i][sY], Signs[iGroup][i][sZ] - 1.0, 0.0, 0.0, f_TempAngle);
  3859. SetPlayerPos(playerid, Signs[iGroup][i][sX] + 1, Signs[iGroup][i][sY] + 1, Signs[iGroup][i][sZ]);
  3860. }
  3861. case 7:
  3862. {
  3863. Signs[iGroup][i][sObjectID] = CreateDynamicObject(1425, Signs[iGroup][i][sX], Signs[iGroup][i][sY], Signs[iGroup][i][sZ] - 0.40, 0.0, 0.0, f_TempAngle);
  3864. SetPlayerPos(playerid, Signs[iGroup][i][sX] + 2, Signs[iGroup][i][sY] + 2, Signs[iGroup][i][sZ]);
  3865. }
  3866. case 8:
  3867. {
  3868. Signs[iGroup][i][sObjectID] = CreateDynamicObject(19960, Signs[iGroup][i][sX], Signs[iGroup][i][sY], Signs[iGroup][i][sZ] - 1.0, 0.0, 0.0, f_TempAngle);
  3869. SetPlayerPos(playerid, Signs[iGroup][i][sX] + 1, Signs[iGroup][i][sY] + 1, Signs[iGroup][i][sZ]);
  3870. }
  3871. case 9:
  3872. {
  3873. Signs[iGroup][i][sObjectID] = CreateDynamicObject(19961, Signs[iGroup][i][sX], Signs[iGroup][i][sY], Signs[iGroup][i][sZ] - 1.0, 0.0, 0.0, f_TempAngle);
  3874. SetPlayerPos(playerid, Signs[iGroup][i][sX] + 1, Signs[iGroup][i][sY] + 1, Signs[iGroup][i][sZ]);
  3875. }
  3876. case 10:
  3877. {
  3878. Signs[iGroup][i][sObjectID] = CreateDynamicObject(19951, Signs[iGroup][i][sX], Signs[iGroup][i][sY], Signs[iGroup][i][sZ] - 1.0, 0.0, 0.0, f_TempAngle);
  3879. SetPlayerPos(playerid, Signs[iGroup][i][sX] + 1, Signs[iGroup][i][sY] + 1, Signs[iGroup][i][sZ]);
  3880. }
  3881. case 11:
  3882. {
  3883. Signs[iGroup][i][sObjectID] = CreateDynamicObject(19952, Signs[iGroup][i][sX], Signs[iGroup][i][sY], Signs[iGroup][i][sZ] - 1.0, 0.0, 0.0, f_TempAngle);
  3884. SetPlayerPos(playerid, Signs[iGroup][i][sX] + 1, Signs[iGroup][i][sY] + 1, Signs[iGroup][i][sZ]);
  3885. }
  3886. case 12:
  3887. {
  3888. Signs[iGroup][i][sObjectID] = CreateDynamicObject(19953, Signs[iGroup][i][sX], Signs[iGroup][i][sY], Signs[iGroup][i][sZ] - 1.0, 0.0, 0.0, f_TempAngle);
  3889. SetPlayerPos(playerid, Signs[iGroup][i][sX] + 1, Signs[iGroup][i][sY] + 1, Signs[iGroup][i][sZ]);
  3890. }
  3891. case 13:
  3892. {
  3893. Signs[iGroup][i][sObjectID] = CreateDynamicObject(19954, Signs[iGroup][i][sX], Signs[iGroup][i][sY], Signs[iGroup][i][sZ] - 1.0, 0.0, 0.0, f_TempAngle);
  3894. SetPlayerPos(playerid, Signs[iGroup][i][sX] + 1, Signs[iGroup][i][sY] + 1, Signs[iGroup][i][sZ]);
  3895. }
  3896. case 14:
  3897. {
  3898. Signs[iGroup][i][sObjectID] = CreateDynamicObject(1233, Signs[iGroup][i][sX], Signs[iGroup][i][sY], Signs[iGroup][i][sZ] - 1.0, 0.0, 0.0, f_TempAngle);
  3899. SetPlayerPos(playerid, Signs[iGroup][i][sX] + 1, Signs[iGroup][i][sY] + 1, Signs[iGroup][i][sZ]);
  3900. }
  3901. default:
  3902. {
  3903. Signs[iGroup][i][sObjectID] = CreateDynamicObject(19966, Signs[iGroup][i][sX], Signs[iGroup][i][sY], Signs[iGroup][i][sZ] - 1.0, 0.0, 0.0, f_TempAngle);
  3904. SetPlayerPos(playerid, Signs[iGroup][i][sX] + 1, Signs[iGroup][i][sY] + 1, Signs[iGroup][i][sZ]);
  3905. }
  3906. }
  3907. GetPlayer3DZone(playerid, Signs[iGroup][i][sDeployedAt], MAX_ZONE_NAME);
  3908. Signs[iGroup][i][sDeployedBy] = GetPlayerNameEx(playerid);
  3909. if(PlayerInfo[playerid][pAdmin] > 1 && PlayerInfo[playerid][pTogReports] != 1) Signs[iGroup][i][sDeployedByStatus] = 1;
  3910. else Signs[iGroup][i][sDeployedByStatus] = 0;
  3911. format(string,sizeof(string),"Sign ID: %d successfully created.", i);
  3912. SendClientMessageEx(playerid, COLOR_WHITE, string);
  3913. return 1;
  3914. }
  3915. }
  3916. SendClientMessageEx(playerid, COLOR_WHITE, "Unable to spawn more signs, limit is " #MAX_SIGNS# ".");
  3917. }
  3918. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  3919. }
  3920. else if(strcmp(object, "tape", true) == 0) {
  3921. if(PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iTapes]) {
  3922. if(GetPVarType(playerid, "DeployingTapeID")) {
  3923. for(new i; i < sizeof(Tapes); i++) {
  3924. if(Tapes[i][sX] == 0 && Tapes[i][sY] == 0 && Tapes[i][sZ] == 0) {
  3925. new Float: f_TempAngle;
  3926. GetPlayerPos(playerid, Tapes[i][sX], Tapes[i][sY], Tapes[i][sZ]);
  3927. GetPlayerFacingAngle(playerid, f_TempAngle);
  3928. Tapes[i][sObjectID] = CreateDynamicObject(19834, Tapes[i][sX], Tapes[i][sY], Tapes[i][sZ], 0.0, 0.0, f_TempAngle);
  3929. GetPlayer3DZone(playerid, Tapes[i][sDeployedAt], MAX_ZONE_NAME);
  3930. Tapes[i][sDeployedBy] = GetPlayerNameEx(playerid);
  3931. if(PlayerInfo[playerid][pAdmin] > 1 && PlayerInfo[playerid][pTogReports] != 1) Tapes[i][sDeployedByStatus] = 1;
  3932. else Tapes[i][sDeployedByStatus] = 0;
  3933. format(szMiscArray,sizeof(szMiscArray),"Tape ID: %d successfully created. You may edit its location using the controls on-screen.", i);
  3934. SendClientMessageEx(playerid, COLOR_WHITE, szMiscArray);
  3935. SendClientMessage(playerid, COLOR_WHITE, "Once done, you can save the tape position by clicking the disc. To cancel, press ESC.");
  3936. SetPlayerPos(playerid, Tapes[i][sX], Tapes[i][sY]-0.4, Tapes[i][sZ]); // Force streamer.
  3937. SetPVarInt(playerid, "DeployingTapeID", i);
  3938. EditDynamicObject(playerid, Tapes[i][sObjectID]);
  3939. return 1;
  3940. }
  3941. }
  3942. SendClientMessageEx(playerid, COLOR_WHITE, "Unable to spawn more tapes, limit is " #MAX_TAPES# ".");
  3943. }
  3944. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You are already editing a tape.");
  3945. }
  3946. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  3947. }
  3948. }
  3949. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  3950. return 1;
  3951. }
  3952. CMD:destroy(playerid, params[])
  3953. {
  3954. if(PlayerInfo[playerid][pMember] != INVALID_GROUP_ID)
  3955. {
  3956. new type, object[12];
  3957. if(sscanf(params, "s[12]d", object, type))
  3958. {
  3959. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /destroy [object] [ID]");
  3960. SendClientMessageEx(playerid, COLOR_GRAD1, "Objects: Cade, Spikes, Flare, Cone, Barrel, Ladder, Sign, Tape");
  3961. return 1;
  3962. }
  3963. else if(IsPlayerInAnyVehicle(playerid)) return SendClientMessageEx(playerid, COLOR_GREY, "You must be on foot to use this command.");
  3964. new iGroup = PlayerInfo[playerid][pMember];
  3965. if(strcmp(object, "cade", true) == 0)
  3966. {
  3967. if(PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iBarricades])
  3968. {
  3969. if(!(0 <= type < MAX_BARRICADES) || (Barricades[iGroup][type][sX] == 0 && Barricades[iGroup][type][sY] == 0 && Barricades[iGroup][type][sZ] == 0)) return SendClientMessageEx(playerid, COLOR_WHITE, "Invalid barricade ID.");
  3970. else if(PlayerInfo[playerid][pAdmin] < 2 && Barricades[iGroup][type][sDeployedByStatus] == 1) return SendClientMessageEx(playerid, COLOR_GRAD2, "You cannot destroy a barricade that an Administrator deployed.");
  3971. else
  3972. {
  3973. new string[43 + MAX_PLAYER_NAME + MAX_ZONE_NAME];
  3974. if(IsValidDynamicObject(Barricades[iGroup][type][sObjectID])) DestroyDynamicObject(Barricades[iGroup][type][sObjectID]);
  3975. Barricades[iGroup][type][sX] = 0;
  3976. Barricades[iGroup][type][sY] = 0;
  3977. Barricades[iGroup][type][sZ] = 0;
  3978. Barricades[iGroup][type][sObjectID] = -1;
  3979. Barricades[iGroup][type][sDeployedBy] = INVALID_PLAYER_ID;
  3980. Barricades[iGroup][type][sDeployedByStatus] = 0;
  3981. format(string, sizeof(string), "Barricade ID: %d successfully deleted.", type);
  3982. SendClientMessageEx(playerid, COLOR_WHITE, string);
  3983. format(string, sizeof(string), "** HQ: A barricade has been destroyed by %s at %s **", GetPlayerNameEx(playerid), Barricades[iGroup][type][sDeployedAt]);
  3984. foreach(new i: Player)
  3985. {
  3986. if(PlayerInfo[i][pToggledChats][12] == 0)
  3987. {
  3988. if(PlayerInfo[i][pMember] == iGroup) SendClientMessageEx(i, arrGroupData[iGroup][g_hRadioColour] * 256 + 255, string);
  3989. if(GetPVarInt(i, "BigEar") == 4 && GetPVarInt(i, "BigEarGroup") == iGroup)
  3990. {
  3991. new szBigEar[128];
  3992. format(szBigEar, sizeof(szBigEar), "(BE) %s", string);
  3993. SendClientMessageEx(i, arrGroupData[iGroup][g_hRadioColour] * 256 + 255, szBigEar);
  3994. }
  3995. }
  3996. }
  3997. return 1;
  3998. }
  3999. }
  4000. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  4001. }
  4002. else if(strcmp(object, "spikes", true) == 0)
  4003. {
  4004. if(PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iSpikeStrips])
  4005. {
  4006. if(!(0 <= type < MAX_SPIKES) || (SpikeStrips[iGroup][type][sX] == 0 && SpikeStrips[iGroup][type][sY] == 0 && SpikeStrips[iGroup][type][sZ] == 0)) return SendClientMessageEx(playerid, COLOR_WHITE, "Invalid spike ID.");
  4007. else if(PlayerInfo[playerid][pAdmin] < 2 && SpikeStrips[iGroup][type][sDeployedByStatus] == 1) return SendClientMessageEx(playerid, COLOR_GRAD2, "You cannot destroy a spikestrip that an Administrator deployed.");
  4008. else
  4009. {
  4010. new string[43 + MAX_PLAYER_NAME + MAX_ZONE_NAME];
  4011. if(IsValidDynamicObject(SpikeStrips[iGroup][type][sObjectID])) DestroyDynamicObject(SpikeStrips[iGroup][type][sObjectID]);
  4012. DestroyDynamicPickup(SpikeStrips[iGroup][type][sPickupID]);
  4013. SpikeStrips[iGroup][type][sX] = 0;
  4014. SpikeStrips[iGroup][type][sY] = 0;
  4015. SpikeStrips[iGroup][type][sZ] = 0;
  4016. SpikeStrips[iGroup][type][sObjectID] = -1;
  4017. SpikeStrips[iGroup][type][sDeployedBy] = INVALID_PLAYER_ID;
  4018. SpikeStrips[iGroup][type][sDeployedByStatus] = 0;
  4019. format(string,sizeof(string),"Spike %d successfully deleted.", type);
  4020. SendClientMessageEx(playerid, COLOR_WHITE, string);
  4021. /*format(string, sizeof(string), "** HQ: A spike has been destroyed by %s at %s **", GetPlayerNameEx(playerid), SpikeStrips[iGroup][type][sDeployedAt]);
  4022. foreach(new i: Player)
  4023. {
  4024. if(PlayerInfo[i][pToggledChats][12] == 0)
  4025. {
  4026. if(PlayerInfo[i][pMember] == iGroup) SendClientMessageEx(i, arrGroupData[iGroup][g_hRadioColour] * 256 + 255, string);
  4027. if(GetPVarInt(i, "BigEar") == 4 && GetPVarInt(i, "BigEarGroup") == iGroup)
  4028. {
  4029. new szBigEar[128];
  4030. format(szBigEar, sizeof(szBigEar), "(BE) %s", string);
  4031. SendClientMessageEx(i, arrGroupData[iGroup][g_hRadioColour] * 256 + 255, szBigEar);
  4032. }
  4033. }
  4034. }*/
  4035. return 1;
  4036. }
  4037. }
  4038. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  4039. }
  4040. else if(strcmp(object, "flare", true) == 0)
  4041. {
  4042. if(PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iFlares])
  4043. {
  4044. if(!(0 <= type < MAX_FLARES) || (Flares[iGroup][type][sX] == 0 && Flares[iGroup][type][sY] == 0 && Flares[iGroup][type][sZ] == 0)) return SendClientMessageEx(playerid, COLOR_WHITE, "Invalid flare ID.");
  4045. else if(PlayerInfo[playerid][pAdmin] < 2 && Flares[iGroup][type][sDeployedByStatus] == 1) return SendClientMessageEx(playerid, COLOR_GRAD2, "You cannot destroy a flare that an Administrator deployed.");
  4046. else
  4047. {
  4048. new string[43 + MAX_PLAYER_NAME + MAX_ZONE_NAME];
  4049. if(IsValidDynamicObject(Flares[iGroup][type][sObjectID])) DestroyDynamicObject(Flares[iGroup][type][sObjectID]);
  4050. Flares[iGroup][type][sX] = 0;
  4051. Flares[iGroup][type][sY] = 0;
  4052. Flares[iGroup][type][sZ] = 0;
  4053. Flares[iGroup][type][sObjectID] = -1;
  4054. Flares[iGroup][type][sDeployedBy] = INVALID_PLAYER_ID;
  4055. Flares[iGroup][type][sDeployedByStatus] = 0;
  4056. format(string,sizeof(string),"Flare ID: %d successfully deleted.", type);
  4057. SendClientMessageEx(playerid, COLOR_WHITE, string);
  4058. return 1;
  4059. }
  4060. }
  4061. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  4062. }
  4063. else if(strcmp(object, "cone", true) == 0)
  4064. {
  4065. if(PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iCones])
  4066. {
  4067. if(!(0 <= type < MAX_CONES) || (Cones[iGroup][type][sX] == 0 && Cones[iGroup][type][sY] == 0 && Cones[iGroup][type][sZ] == 0)) return SendClientMessageEx(playerid, COLOR_WHITE, "Invalid cone ID.");
  4068. else if(PlayerInfo[playerid][pAdmin] < 2 && Cones[iGroup][type][sDeployedByStatus] == 1) return SendClientMessageEx(playerid, COLOR_GRAD2, "You cannot destroy a cone that an Administrator deployed.");
  4069. else
  4070. {
  4071. new string[43 + MAX_PLAYER_NAME + MAX_ZONE_NAME];
  4072. if(IsValidDynamicObject(Cones[iGroup][type][sObjectID])) DestroyDynamicObject(Cones[iGroup][type][sObjectID]);
  4073. Cones[iGroup][type][sX] = 0;
  4074. Cones[iGroup][type][sY] = 0;
  4075. Cones[iGroup][type][sZ] = 0;
  4076. Cones[iGroup][type][sObjectID] = -1;
  4077. Cones[iGroup][type][sDeployedBy] = INVALID_PLAYER_ID;
  4078. Cones[iGroup][type][sDeployedByStatus] = 0;
  4079. format(string,sizeof(string),"Cone ID: %d successfully deleted.", type);
  4080. SendClientMessageEx(playerid, COLOR_WHITE, string);
  4081. return 1;
  4082. }
  4083. }
  4084. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  4085. }
  4086. else if(strcmp(object, "barrel", true) == 0)
  4087. {
  4088. if(PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iBarrels])
  4089. {
  4090. if(!(0 <= type < MAX_BARRELS) || (Barrels[iGroup][type][sX] == 0 && Barrels[iGroup][type][sY] == 0 && Barrels[iGroup][type][sZ] == 0)) return SendClientMessageEx(playerid, COLOR_WHITE, "Invalid barrel ID.");
  4091. else if(PlayerInfo[playerid][pAdmin] < 2 && Barrels[iGroup][type][sDeployedByStatus] == 1) return SendClientMessageEx(playerid, COLOR_GRAD2, "You cannot destroy a barrel that an Administrator deployed.");
  4092. else
  4093. {
  4094. new string[43 + MAX_PLAYER_NAME + MAX_ZONE_NAME];
  4095. if(IsValidDynamicObject(Barrels[iGroup][type][sObjectID])) DestroyDynamicObject(Barrels[iGroup][type][sObjectID]);
  4096. Barrels[iGroup][type][sX] = 0;
  4097. Barrels[iGroup][type][sY] = 0;
  4098. Barrels[iGroup][type][sZ] = 0;
  4099. Barrels[iGroup][type][sObjectID] = -1;
  4100. Barrels[iGroup][type][sDeployedBy] = INVALID_PLAYER_ID;
  4101. Barrels[iGroup][type][sDeployedByStatus] = 0;
  4102. format(string,sizeof(string),"Barrel ID: %d successfully deleted.", type);
  4103. SendClientMessageEx(playerid, COLOR_WHITE, string);
  4104. return 1;
  4105. }
  4106. }
  4107. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  4108. }
  4109. else if(strcmp(object, "ladder", true) == 0)
  4110. {
  4111. if(PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iLadders])
  4112. {
  4113. if(!(0 <= type < MAX_LADDERS) || (Ladders[iGroup][type][sX] == 0 && Ladders[iGroup][type][sY] == 0 && Ladders[iGroup][type][sZ] == 0)) return SendClientMessageEx(playerid, COLOR_WHITE, "Invalid ladder ID.");
  4114. else if(PlayerInfo[playerid][pAdmin] < 2 && Barrels[iGroup][type][sDeployedByStatus] == 1) return SendClientMessageEx(playerid, COLOR_GRAD2, "You cannot destroy a ladder that an Administrator deployed.");
  4115. else
  4116. {
  4117. new string[43 + MAX_PLAYER_NAME + MAX_ZONE_NAME];
  4118. if(IsValidDynamicObject(Ladders[iGroup][type][sObjectID])) DestroyDynamicObject(Ladders[iGroup][type][sObjectID]);
  4119. Ladders[iGroup][type][sX] = 0;
  4120. Ladders[iGroup][type][sY] = 0;
  4121. Ladders[iGroup][type][sZ] = 0;
  4122. Ladders[iGroup][type][sObjectID] = -1;
  4123. Ladders[iGroup][type][sDeployedBy] = INVALID_PLAYER_ID;
  4124. Ladders[iGroup][type][sDeployedByStatus] = 0;
  4125. format(string,sizeof(string),"Ladder ID: %d successfully deleted.", type);
  4126. SendClientMessageEx(playerid, COLOR_WHITE, string);
  4127. return 1;
  4128. }
  4129. }
  4130. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  4131. }
  4132. else if(strcmp(object, "sign", true) == 0)
  4133. {
  4134. if(PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iBarrels])
  4135. {
  4136. if(!(0 <= type < MAX_SIGNS) || (Signs[iGroup][type][sX] == 0 && Signs[iGroup][type][sY] == 0 && Signs[iGroup][type][sZ] == 0)) return SendClientMessageEx(playerid, COLOR_WHITE, "Invalid sign ID.");
  4137. else if(PlayerInfo[playerid][pAdmin] < 2 && Signs[iGroup][type][sDeployedByStatus] == 1) return SendClientMessageEx(playerid, COLOR_GRAD2, "You cannot destroy a sign that an Administrator deployed.");
  4138. else
  4139. {
  4140. new string[43 + MAX_PLAYER_NAME + MAX_ZONE_NAME];
  4141. if(IsValidDynamicObject(Signs[iGroup][type][sObjectID])) DestroyDynamicObject(Signs[iGroup][type][sObjectID]);
  4142. Signs[iGroup][type][sX] = 0;
  4143. Signs[iGroup][type][sY] = 0;
  4144. Signs[iGroup][type][sZ] = 0;
  4145. Signs[iGroup][type][sObjectID] = -1;
  4146. Signs[iGroup][type][sDeployedBy] = INVALID_PLAYER_ID;
  4147. Signs[iGroup][type][sDeployedByStatus] = 0;
  4148. format(string,sizeof(string),"Sign ID: %d successfully deleted.", type);
  4149. SendClientMessageEx(playerid, COLOR_WHITE, string);
  4150. return 1;
  4151. }
  4152. }
  4153. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  4154. }
  4155. else if(strcmp(object, "tape", true) == 0)
  4156. {
  4157. if(PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iTapes])
  4158. {
  4159. if(!(0 <= type < sizeof(Tapes)) || (Tapes[type][sX] == 0 && Tapes[type][sY] == 0 && Tapes[type][sZ] == 0)) return SendClientMessageEx(playerid, COLOR_WHITE, "Invalid tape ID.");
  4160. else if(PlayerInfo[playerid][pAdmin] < 2 && Tapes[type][sDeployedByStatus] == 1) return SendClientMessageEx(playerid, COLOR_GRAD2, "You cannot destroy a tape that an Administrator deployed.");
  4161. else
  4162. {
  4163. if(PlayerInfo[playerid][pMember] == Tapes[type][iDeployedByGroup])
  4164. {
  4165. new string[43 + MAX_PLAYER_NAME + MAX_ZONE_NAME];
  4166. DestroyDynamicObject(Tapes[type][sObjectID]);
  4167. Tapes[type][sX] = 0;
  4168. Tapes[type][sY] = 0;
  4169. Tapes[type][sZ] = 0;
  4170. Tapes[type][sObjectID] = INVALID_OBJECT_ID;
  4171. Tapes[type][sDeployedBy] = INVALID_PLAYER_ID;
  4172. Tapes[type][sDeployedByStatus] = 0;
  4173. format(string,sizeof(string),"Tape ID: %d successfully deleted.", type);
  4174. SendClientMessageEx(playerid, COLOR_WHITE, string);
  4175. return 1;
  4176. }
  4177. else
  4178. {
  4179. SendClientMessageEx(playerid, COLOR_GRAD2, "* You can not delete other groups tape *");
  4180. }
  4181. }
  4182. }
  4183. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  4184. }
  4185. }
  4186. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  4187. return 1;
  4188. }
  4189. CMD:acades(playerid, params[]) {
  4190. if(PlayerInfo[playerid][pAdmin] < 4 && PlayerInfo[playerid][pASM] < 1) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  4191. szMiscArray[0] = 0;
  4192. szMiscArray = "Group\tID\tLocation\tDeployer";
  4193. for(new iGroupID = 0; iGroupID < MAX_GROUPS; iGroupID++) {
  4194. for(new iCade; iCade < MAX_BARRICADES; iCade++) {
  4195. if(Barricades[iGroupID][iCade][sX] != 0 && Barricades[iGroupID][iCade][sY] != 0 && Barricades[iGroupID][iCade][sZ] != 0) {
  4196. format(szMiscArray, sizeof(szMiscArray), "%s\n%s(%d)\t%d\t%s\t%s", szMiscArray, arrGroupData[iGroupID][g_szGroupName], iGroupID, iCade, Barricades[iGroupID][iCade][sDeployedAt], Barricades[iGroupID][iCade][sDeployedBy]);
  4197. }
  4198. }
  4199. }
  4200. ShowPlayerDialogEx(playerid, DIALOG_NOTHING, DIALOG_STYLE_TABLIST_HEADERS, "Server Barricades", szMiscArray, "Close", "");
  4201. return 1;
  4202. }
  4203. CMD:cades(playerid, params[])
  4204. {
  4205. if(PlayerInfo[playerid][pMember] != INVALID_GROUP_ID && arrGroupData[PlayerInfo[playerid][pMember]][g_iBarricades] != -1 && PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iBarricades])
  4206. {
  4207. new iGroup = PlayerInfo[playerid][pMember];
  4208. SendClientMessageEx(playerid, COLOR_WHITE, "Current deployed barricades:");
  4209. for(new i, string[56 + MAX_ZONE_NAME + MAX_PLAYER_NAME]; i < MAX_BARRICADES; i++)
  4210. {
  4211. if(Barricades[iGroup][i][sX] != 0 && Barricades[iGroup][i][sY] != 0 && Barricades[iGroup][i][sZ] != 0) // Checking for next available ID.
  4212. {
  4213. format(string, sizeof(string), "HQ: Barricade #%d | Deployed location: %s | Deployed by: %s", i, Barricades[iGroup][i][sDeployedAt], Barricades[iGroup][i][sDeployedBy]);
  4214. SendClientMessageEx(playerid, COLOR_GRAD2, string);
  4215. }
  4216. }
  4217. }
  4218. else
  4219. {
  4220. SendClientMessageEx(playerid, COLOR_GRAD2, "You're not authorized.");
  4221. }
  4222. return 1;
  4223. }
  4224. CMD:aspikes(playerid, params[]) {
  4225. if(PlayerInfo[playerid][pAdmin] < 4 && PlayerInfo[playerid][pASM] < 1) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  4226. szMiscArray[0] = 0;
  4227. szMiscArray = "Group\tID\tLocation\tDeployer";
  4228. for(new iGroupID = 0; iGroupID < MAX_GROUPS; iGroupID++) {
  4229. for(new iSpike; iSpike < MAX_SPIKES; iSpike++) {
  4230. if(SpikeStrips[iGroupID][iSpike][sX] != 0 && SpikeStrips[iGroupID][iSpike][sY] != 0 && SpikeStrips[iGroupID][iSpike][sZ] != 0) {
  4231. format(szMiscArray, sizeof(szMiscArray), "%s\n%s(%d)\t%d\t%s\t%s", szMiscArray, arrGroupData[iGroupID][g_szGroupName], iGroupID, iSpike, SpikeStrips[iGroupID][iSpike][sDeployedAt], SpikeStrips[iGroupID][iSpike][sDeployedBy]);
  4232. }
  4233. }
  4234. }
  4235. ShowPlayerDialogEx(playerid, DIALOG_NOTHING, DIALOG_STYLE_TABLIST_HEADERS, "Server Spikes", szMiscArray, "Close", "");
  4236. return 1;
  4237. }
  4238. CMD:spikes(playerid, params[])
  4239. {
  4240. if (PlayerInfo[playerid][pMember] != INVALID_GROUP_ID && PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iSpikeStrips])
  4241. {
  4242. new iGroup = PlayerInfo[playerid][pMember];
  4243. SendClientMessageEx(playerid, COLOR_WHITE, "Current deployed spikes:");
  4244. for(new i, string[56 + MAX_ZONE_NAME + MAX_PLAYER_NAME]; i < MAX_SPIKES; i++)
  4245. {
  4246. if(SpikeStrips[iGroup][i][sX] != 0 && SpikeStrips[iGroup][i][sY] != 0 && SpikeStrips[iGroup][i][sZ] != 0) // Checking for next available ID.
  4247. {
  4248. format(string, sizeof(string), "HQ: Spike ID: %d | Deployed location: %s | Deployed by: %s", i, SpikeStrips[iGroup][i][sDeployedAt], SpikeStrips[iGroup][i][sDeployedBy]);
  4249. SendClientMessageEx(playerid, COLOR_GRAD2, string);
  4250. }
  4251. }
  4252. } else SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  4253. return 1;
  4254. }
  4255. CMD:aflares(playerid, params[]) {
  4256. if(PlayerInfo[playerid][pAdmin] < 4 && PlayerInfo[playerid][pASM] < 1) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  4257. szMiscArray[0] = 0;
  4258. szMiscArray = "Group\tID\tLocation\tDeployer";
  4259. for(new iGroupID = 0; iGroupID < MAX_GROUPS; iGroupID++) {
  4260. for(new iFlare; iFlare < MAX_FLARES; iFlare++) {
  4261. if(Flares[iGroupID][iFlare][sX] != 0 && Flares[iGroupID][iFlare][sY] != 0 && Flares[iGroupID][iFlare][sZ] != 0) {
  4262. format(szMiscArray, sizeof(szMiscArray), "%s\n%s(%d)\t%d\t%s\t%s", szMiscArray, arrGroupData[iGroupID][g_szGroupName], iGroupID, iFlare, Flares[iGroupID][iFlare][sDeployedAt], Flares[iGroupID][iFlare][sDeployedBy]);
  4263. }
  4264. }
  4265. }
  4266. ShowPlayerDialogEx(playerid, DIALOG_NOTHING, DIALOG_STYLE_TABLIST_HEADERS, "Server Flares", szMiscArray, "Close", "");
  4267. return 1;
  4268. }
  4269. CMD:flares(playerid, params[])
  4270. {
  4271. if(PlayerInfo[playerid][pMember] != INVALID_GROUP_ID && PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iFlares])
  4272. {
  4273. new iGroup = PlayerInfo[playerid][pMember];
  4274. SendClientMessageEx(playerid, COLOR_WHITE, "Current deployed flares:");
  4275. for(new i, string[58 + MAX_ZONE_NAME + MAX_PLAYER_NAME]; i < MAX_FLARES; i++)
  4276. {
  4277. if(Flares[iGroup][i][sX] != 0 && Flares[iGroup][i][sY] != 0 && Flares[iGroup][i][sZ] != 0) // Checking for next available ID.
  4278. {
  4279. format(string, sizeof(string), "HQ: Flare ID: %d | Deployed location: %s | Deployed by: %s", i, Flares[iGroup][i][sDeployedAt], Flares[iGroup][i][sDeployedBy]);
  4280. SendClientMessageEx(playerid, COLOR_GRAD2, string);
  4281. }
  4282. }
  4283. }
  4284. else
  4285. {
  4286. SendClientMessageEx(playerid, COLOR_GRAD2, "You're not authorized.");
  4287. }
  4288. return 1;
  4289. }
  4290. CMD:acones(playerid, params[]) {
  4291. if(PlayerInfo[playerid][pAdmin] < 4 && PlayerInfo[playerid][pASM] < 1) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  4292. szMiscArray[0] = 0;
  4293. szMiscArray = "Group\tID\tLocation\tDeployer";
  4294. for(new iGroupID = 0; iGroupID < MAX_GROUPS; iGroupID++) {
  4295. for(new iCone; iCone < MAX_CONES; iCone++) {
  4296. if(Cones[iGroupID][iCone][sX] != 0 && Cones[iGroupID][iCone][sY] != 0 && Cones[iGroupID][iCone][sZ] != 0) {
  4297. format(szMiscArray, sizeof(szMiscArray), "%s\n%s(%d)\t%d\t%s\t%s", szMiscArray, arrGroupData[iGroupID][g_szGroupName], iGroupID, iCone, Cones[iGroupID][iCone][sDeployedAt], Cones[iGroupID][iCone][sDeployedBy]);
  4298. }
  4299. }
  4300. }
  4301. ShowPlayerDialogEx(playerid, DIALOG_NOTHING, DIALOG_STYLE_TABLIST_HEADERS, "Server Cones", szMiscArray, "Close", "");
  4302. return 1;
  4303. }
  4304. CMD:cones(playerid, params[])
  4305. {
  4306. if(PlayerInfo[playerid][pMember] != INVALID_GROUP_ID && PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iCones])
  4307. {
  4308. new iGroup = PlayerInfo[playerid][pMember];
  4309. SendClientMessageEx(playerid, COLOR_WHITE, "Current deployed cones:");
  4310. for(new i, string[56 + MAX_ZONE_NAME + MAX_PLAYER_NAME]; i < MAX_CONES; i++)
  4311. {
  4312. if(Cones[iGroup][i][sX] != 0 && Cones[iGroup][i][sY] != 0 && Cones[iGroup][i][sZ] != 0) // Checking for next available ID.
  4313. {
  4314. format(string, sizeof(string), "HQ: Cone ID: %d | Deployed location: %s | Deployed by: %s", i, Cones[iGroup][i][sDeployedAt], Cones[iGroup][i][sDeployedBy]);
  4315. SendClientMessageEx(playerid, COLOR_GRAD2, string);
  4316. }
  4317. }
  4318. }
  4319. else
  4320. {
  4321. SendClientMessageEx(playerid, COLOR_GRAD2, "You're not authorized.");
  4322. }
  4323. return 1;
  4324. }
  4325. CMD:abarrels(playerid, params[]) {
  4326. if(PlayerInfo[playerid][pAdmin] < 4 && PlayerInfo[playerid][pASM] < 1) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  4327. szMiscArray[0] = 0;
  4328. szMiscArray = "Group\tID\tLocation\tDeployer";
  4329. for(new iGroupID = 0; iGroupID < MAX_GROUPS; iGroupID++) {
  4330. for(new iBarrel; iBarrel < MAX_BARRELS; iBarrel++) {
  4331. if(Barrels[iGroupID][iBarrel][sX] != 0 && Barrels[iGroupID][iBarrel][sY] != 0 && Barrels[iGroupID][iBarrel][sZ] != 0) {
  4332. format(szMiscArray, sizeof(szMiscArray), "%s\n%s(%d)\t%d\t%s\t%s", szMiscArray, arrGroupData[iGroupID][g_szGroupName], iGroupID, iBarrel, Barrels[iGroupID][iBarrel][sDeployedAt], Barrels[iGroupID][iBarrel][sDeployedBy]);
  4333. }
  4334. }
  4335. }
  4336. ShowPlayerDialogEx(playerid, DIALOG_NOTHING, DIALOG_STYLE_TABLIST_HEADERS, "Server Barrels", szMiscArray, "Close", "");
  4337. return 1;
  4338. }
  4339. CMD:barrels(playerid, params[])
  4340. {
  4341. if(PlayerInfo[playerid][pMember] != INVALID_GROUP_ID && PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iBarrels])
  4342. {
  4343. new iGroup = PlayerInfo[playerid][pMember];
  4344. SendClientMessageEx(playerid, COLOR_WHITE, "Current deployed barrels:");
  4345. for(new i, string[56 + MAX_ZONE_NAME + MAX_PLAYER_NAME]; i < MAX_BARRELS; i++)
  4346. {
  4347. if(Barrels[iGroup][i][sX] != 0 && Barrels[iGroup][i][sY] != 0 && Barrels[iGroup][i][sZ] != 0) // Checking for next available ID.
  4348. {
  4349. format(string, sizeof(string), "HQ: Barrel ID: %d | Deployed location: %s | Deployed by: %s", i, Barrels[iGroup][i][sDeployedAt], Barrels[iGroup][i][sDeployedBy]);
  4350. SendClientMessageEx(playerid, COLOR_GRAD2, string);
  4351. }
  4352. }
  4353. }
  4354. else
  4355. {
  4356. SendClientMessageEx(playerid, COLOR_GRAD2, "You're not authorized.");
  4357. }
  4358. return 1;
  4359. }
  4360. CMD:aladders(playerid, params[]) {
  4361. if(PlayerInfo[playerid][pAdmin] < 4 && PlayerInfo[playerid][pASM] < 1) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  4362. szMiscArray[0] = 0;
  4363. szMiscArray = "Group\tID\tLocation\tDeployer";
  4364. for(new iGroupID = 0; iGroupID < MAX_GROUPS; iGroupID++) {
  4365. for(new iLadder; iLadder < MAX_LADDERS; iLadder++) {
  4366. if(Ladders[iGroupID][iLadder][sX] != 0 && Ladders[iGroupID][iLadder][sY] != 0 && Ladders[iGroupID][iLadder][sZ] != 0) {
  4367. format(szMiscArray, sizeof(szMiscArray), "%s\n%s(%d)\t%d\t%s\t%s", szMiscArray, arrGroupData[iGroupID][g_szGroupName], iGroupID, iLadder, Ladders[iGroupID][iLadder][sDeployedAt], Ladders[iGroupID][iLadder][sDeployedBy]);
  4368. }
  4369. }
  4370. }
  4371. ShowPlayerDialogEx(playerid, DIALOG_NOTHING, DIALOG_STYLE_TABLIST_HEADERS, "Server Ladders", szMiscArray, "Close", "");
  4372. return 1;
  4373. }
  4374. CMD:ladders(playerid, params[])
  4375. {
  4376. if(PlayerInfo[playerid][pMember] != INVALID_GROUP_ID && PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iLadders])
  4377. {
  4378. new iGroup = PlayerInfo[playerid][pMember];
  4379. SendClientMessageEx(playerid, COLOR_WHITE, "Current deployed ladders:");
  4380. for(new i, string[56 + MAX_ZONE_NAME + MAX_PLAYER_NAME]; i < MAX_LADDERS; i++)
  4381. {
  4382. if(Ladders[iGroup][i][sX] != 0 && Ladders[iGroup][i][sY] != 0 && Ladders[iGroup][i][sZ] != 0) // Checking for next available ID.
  4383. {
  4384. format(string, sizeof(string), "HQ: Ladder ID: %d | Deployed location: %s | Deployed by: %s", i, Ladders[iGroup][i][sDeployedAt], Ladders[iGroup][i][sDeployedBy]);
  4385. SendClientMessageEx(playerid, COLOR_GRAD2, string);
  4386. }
  4387. }
  4388. }
  4389. else
  4390. {
  4391. SendClientMessageEx(playerid, COLOR_GRAD2, "You're not authorized.");
  4392. }
  4393. return 1;
  4394. }
  4395. CMD:asigns(playerid, params[]) {
  4396. if(PlayerInfo[playerid][pAdmin] < 4 && PlayerInfo[playerid][pASM] < 1) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  4397. szMiscArray[0] = 0;
  4398. szMiscArray = "Group\tID\tLocation\tDeployer";
  4399. for(new iGroupID = 0; iGroupID < MAX_GROUPS; iGroupID++) {
  4400. for(new iSign; iSign < MAX_SIGNS; iSign++) {
  4401. if(Signs[iGroupID][iSign][sX] != 0 && Signs[iGroupID][iSign][sY] != 0 && Signs[iGroupID][iSign][sZ] != 0) {
  4402. format(szMiscArray, sizeof(szMiscArray), "%s\n%s(%d)\t%d\t%s\t%s", szMiscArray, arrGroupData[iGroupID][g_szGroupName], iGroupID, iSign, Signs[iGroupID][iSign][sDeployedAt], Signs[iGroupID][iSign][sDeployedBy]);
  4403. }
  4404. }
  4405. }
  4406. ShowPlayerDialogEx(playerid, DIALOG_NOTHING, DIALOG_STYLE_TABLIST_HEADERS, "Server Signs", szMiscArray, "Close", "");
  4407. return 1;
  4408. }
  4409. CMD:signs(playerid, params[])
  4410. {
  4411. if(PlayerInfo[playerid][pMember] != INVALID_GROUP_ID && PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iBarrels])
  4412. {
  4413. new iGroup = PlayerInfo[playerid][pMember];
  4414. SendClientMessageEx(playerid, COLOR_WHITE, "Current deployed signs:");
  4415. for(new i, string[56 + MAX_ZONE_NAME + MAX_PLAYER_NAME]; i < MAX_BARRELS; i++)
  4416. {
  4417. if(Signs[iGroup][i][sX] != 0 && Signs[iGroup][i][sY] != 0 && Signs[iGroup][i][sZ] != 0) // Checking for next available ID.
  4418. {
  4419. format(string, sizeof(string), "HQ: Sign ID: %d | Deployed location: %s | Deployed by: %s", i, Signs[iGroup][i][sDeployedAt], Signs[iGroup][i][sDeployedBy]);
  4420. SendClientMessageEx(playerid, COLOR_GRAD2, string);
  4421. }
  4422. }
  4423. }
  4424. else
  4425. {
  4426. SendClientMessageEx(playerid, COLOR_GRAD2, "You're not authorized.");
  4427. }
  4428. return 1;
  4429. }
  4430. CMD:tapes(playerid, params[]) {
  4431. if(PlayerInfo[playerid][pMember] != INVALID_GROUP_ID && arrGroupData[PlayerInfo[playerid][pMember]][g_iTapes] != -1 && PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iTapes])
  4432. {
  4433. SendClientMessageEx(playerid, COLOR_WHITE, "Current deployed tapes:");
  4434. for(new i, string[56 + MAX_ZONE_NAME + MAX_PLAYER_NAME]; i < sizeof(Tapes); i++)
  4435. {
  4436. if(Tapes[i][sX] != 0 && Tapes[i][sY] != 0 && Tapes[i][sZ] != 0) // Checking for next available ID.
  4437. {
  4438. format(string, sizeof(string), "HQ: Tape #%d | Deployed location: %s | Deployed by: %s", i, Tapes[i][sDeployedAt], Tapes[i][sDeployedBy]);
  4439. SendClientMessageEx(playerid, COLOR_GRAD2, string);
  4440. }
  4441. }
  4442. }
  4443. else
  4444. {
  4445. SendClientMessageEx(playerid, COLOR_GRAD2, "You're not authorized.");
  4446. }
  4447. return 1;
  4448. }
  4449. CMD:quitgroup(playerid, params[])
  4450. {
  4451. if(PlayerInfo[playerid][pMember] >= 0 || PlayerInfo[playerid][pLeader] >= 0)
  4452. {
  4453. SendClientMessageEx(playerid, COLOR_LIGHTBLUE,"* You have quit your group, you are now a civilian again.");
  4454. new string[128];
  4455. format(string, sizeof(string), "%s (%d) has quit the %s as a rank %i", GetPlayerNameEx(playerid), GetPlayerSQLId(playerid), arrGroupData[PlayerInfo[playerid][pMember]][g_szGroupName], PlayerInfo[playerid][pRank]);
  4456. GroupLog(PlayerInfo[playerid][pMember], string);
  4457. if(arrGroupData[PlayerInfo[playerid][pMember]][g_iGroupType] != GROUP_TYPE_CRIMINAL) ResetPlayerWeaponsEx(playerid);
  4458. PlayerInfo[playerid][pMember] = INVALID_GROUP_ID;
  4459. PlayerInfo[playerid][pRank] = INVALID_RANK;
  4460. PlayerInfo[playerid][pDuty] = 0;
  4461. PlayerInfo[playerid][pLeader] = INVALID_GROUP_ID;
  4462. PlayerInfo[playerid][pDivision] = INVALID_DIVISION;
  4463. strcpy(PlayerInfo[playerid][pBadge], "None", 9);
  4464. if(!IsValidSkin(GetPlayerSkin(playerid)))
  4465. {
  4466. new rand = random(sizeof(CIV));
  4467. SetPlayerSkin(playerid,CIV[rand]);
  4468. PlayerInfo[playerid][pModel] = CIV[rand];
  4469. }
  4470. SetPlayerToTeamColor(playerid);
  4471. player_remove_vip_toys(playerid);
  4472. pTazer{playerid} = 0;
  4473. DeletePVar(playerid, "HidingKnife");
  4474. if(GetPVarType(playerid, "RepFam_TL")) Rivalry_Toggle(playerid, false);
  4475. }
  4476. else
  4477. {
  4478. SendClientMessageEx(playerid, COLOR_GRAD1, "You're not in a group.");
  4479. }
  4480. return 1;
  4481. }
  4482. CMD:dvstorage(playerid, params[])
  4483. {
  4484. new iGroupID = PlayerInfo[playerid][pMember];
  4485. if((0 <= iGroupID <= MAX_GROUPS))
  4486. {
  4487. if(PlayerInfo[playerid][pLeader] == iGroupID)
  4488. {
  4489. if(IsPlayerInRangeOfPoint(playerid, 100.0, arrGroupData[iGroupID][g_fGaragePos][0], arrGroupData[iGroupID][g_fGaragePos][1], arrGroupData[iGroupID][g_fGaragePos][2]))
  4490. {
  4491. new vstring[3000];
  4492. for(new i; i < MAX_DYNAMIC_VEHICLES; i++)
  4493. {
  4494. new iModelID = DynVehicleInfo[i][gv_iModel];
  4495. if(400 <= iModelID < 612 && DynVehicleInfo[i][gv_igID] == iGroupID)
  4496. {
  4497. if(DynVehicleInfo[i][gv_iDisabled] == 1) {
  4498. format(vstring, sizeof(vstring), "%s\n(%d)%s (Disabled)", vstring, i, VehicleName[iModelID - 400]);
  4499. }
  4500. else if(DynVehicleInfo[i][gv_iDisabled] == 2) {
  4501. format(vstring, sizeof(vstring), "%s\n(%d) %s (Stored)", vstring, i, VehicleName[iModelID - 400], DynVehicleInfo[i][gv_iSpawnedID]);
  4502. }
  4503. else if(DynVehicleInfo[i][gv_iSpawnedID] != INVALID_VEHICLE_ID) {
  4504. format(vstring, sizeof(vstring), "%s\n(%d) %s (Spawned) [VehicleID : %d]", vstring, i, VehicleName[iModelID - 400], DynVehicleInfo[i][gv_iSpawnedID]);
  4505. }
  4506. }
  4507. }
  4508. ShowPlayerDialogEx(playerid, DV_STORAGE, DIALOG_STYLE_LIST, "Dynamic Group Vehicle Storage", vstring, "Track", "Cancel");
  4509. }
  4510. else return SendClientMessageEx(playerid, COLOR_GRAD1, "You're not in range of your group garage!");
  4511. }
  4512. else return SendClientMessageEx(playerid, COLOR_GRAD1, "You're not a group leader!");
  4513. }
  4514. else return SendClientMessageEx(playerid, COLOR_GRAD1, "You're not in a group!");
  4515. return 1;
  4516. }
  4517. CMD:bug(playerid, params[])
  4518. {
  4519. if (PlayerInfo[playerid][pMember] != INVALID_GROUP_ID && PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iBugAccess])
  4520. {
  4521. new
  4522. iTargetID;
  4523. if(sscanf(params, "u", iTargetID)) {
  4524. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /bug [player]");
  4525. }
  4526. else if(PlayerInfo[iTargetID][pAdmin] >= 2) {
  4527. SendClientMessageEx(playerid, COLOR_GREY, "You cannot place a bug on this person.");
  4528. }
  4529. else if(GetPVarInt(iTargetID, "AdvisorDuty") == 1 && (GetPVarType(iTargetID, "HelpingSomeone") || GetPVarType(iTargetID, "pGodMode"))) {
  4530. SendClientMessageEx(playerid, COLOR_GREY, "You cannot place bugs on advisors while they are on duty.");
  4531. }
  4532. else if(PlayerInfo[iTargetID][pBugged] != INVALID_GROUP_ID) {
  4533. new
  4534. szMessage[32 + MAX_PLAYER_NAME];
  4535. PlayerInfo[iTargetID][pBugged] = INVALID_GROUP_ID;
  4536. format(szMessage,sizeof(szMessage),"The bug on %s has been disabled.", GetPlayerNameEx(iTargetID));
  4537. SendClientMessageEx(playerid, COLOR_GRAD1, szMessage);
  4538. }
  4539. else if(ProxDetectorS(4.0, playerid, iTargetID)) {
  4540. new
  4541. szMessage[28 + MAX_PLAYER_NAME];
  4542. PlayerInfo[iTargetID][pBugged] = PlayerInfo[playerid][pMember];
  4543. format(szMessage,sizeof(szMessage),"You have placed a bug on %s.",GetPlayerNameEx(iTargetID));
  4544. SendClientMessageEx(playerid, COLOR_GRAD1, szMessage);
  4545. }
  4546. else SendClientMessageEx(playerid, COLOR_GRAD1, "You need to be close to the person.");
  4547. } else SendClientMessageEx(playerid, COLOR_GREY, "You do not have access to this radio frequency.");
  4548. return 1;
  4549. }
  4550. CMD:gov(playerid, params[])
  4551. {
  4552. new
  4553. iGroupID = PlayerInfo[playerid][pLeader],
  4554. iRank = PlayerInfo[playerid][pRank];
  4555. if ((0 <= iGroupID < MAX_GROUPS) && iRank >= arrGroupData[iGroupID][g_iGovAccess]) {
  4556. if(!isnull(params)) {
  4557. new string[128];
  4558. format(string, sizeof(string), "** %s %s %s: %s **", arrGroupData[iGroupID][g_szGroupName], arrGroupRanks[iGroupID][iRank], GetPlayerNameEx(playerid), params);
  4559. SendClientMessageToAllEx(COLOR_WHITE, "|___________ Government News Announcement ___________|");
  4560. SendClientMessageToAllEx(arrGroupData[iGroupID][g_hDutyColour] * 256 + 255, string);
  4561. format(string, sizeof(string), "** %s %s %s(%d): %s **", arrGroupData[iGroupID][g_szGroupName], arrGroupRanks[iGroupID][iRank], GetPlayerNameEx(playerid), GetPlayerSQLId(playerid), params);
  4562. Log("logs/gov.log", string);
  4563. } else SendClientMessageEx(playerid, COLOR_GREY, "USAGE: (/gov)ernment [text]");
  4564. } else SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  4565. return 1;
  4566. }
  4567. CMD:switchgroup(playerid, params[])
  4568. {
  4569. if(PlayerInfo[playerid][pAdmin] >= 4 || PlayerInfo[playerid][pASM] >= 1 || PlayerInfo[playerid][pFactionModerator] || PlayerInfo[playerid][pFactionModerator] >= 4) {
  4570. Group_ListGroups(playerid, DIALOG_SWITCHGROUP);
  4571. }
  4572. else SendClientMessageEx(playerid, COLOR_GREY, "You are not authorized.");
  4573. return 1;
  4574. }
  4575. CMD:groupcsfban(playerid, params[])
  4576. {
  4577. if(PlayerInfo[playerid][pAdmin] >= 4 || PlayerInfo[playerid][pASM] >= 1 || PlayerInfo[playerid][pFactionModerator] >= 1)
  4578. {
  4579. new string[128], giveplayerid;
  4580. if(sscanf(params, "u", giveplayerid)) return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /groupcsfban [player]");
  4581. if(IsPlayerConnected(giveplayerid))
  4582. {
  4583. if( PlayerInfo[giveplayerid][pMember] >= 0 || PlayerInfo[giveplayerid][pLeader] >= 0 )
  4584. {
  4585. PlayerInfo[giveplayerid][pCSFBanned] = 1;
  4586. format(string, sizeof(string), "You have been group-banned, by %s, from ALL Civil Service Groups.", GetPlayerNameEx( playerid ));
  4587. SendClientMessageEx(giveplayerid, COLOR_LIGHTBLUE, string);
  4588. PlayerInfo[giveplayerid][pMember] = INVALID_GROUP_ID;
  4589. PlayerInfo[giveplayerid][pLeader] = INVALID_GROUP_ID;
  4590. PlayerInfo[giveplayerid][pDivision] = INVALID_DIVISION;
  4591. strcpy(PlayerInfo[giveplayerid][pBadge], "None", 9);
  4592. PlayerInfo[giveplayerid][pRank] = INVALID_RANK;
  4593. PlayerInfo[giveplayerid][pDuty] = 0;
  4594. PlayerInfo[giveplayerid][pModel] = NOOB_SKIN;
  4595. SetPlayerToTeamColor(giveplayerid);
  4596. SetPlayerSkin(giveplayerid, NOOB_SKIN);
  4597. format(string, sizeof(string), "You have faction-banned %s from all CSF groups.", GetPlayerNameEx(giveplayerid));
  4598. SendClientMessageEx(playerid, COLOR_WHITE, string);
  4599. }
  4600. else
  4601. {
  4602. SendClientMessageEx(playerid, COLOR_WHITE, "You can't kick someone from a faction if they're not a leader / member.");
  4603. }
  4604. }
  4605. else
  4606. {
  4607. SendClientMessageEx(playerid, COLOR_GREY, "Player not connected.");
  4608. }
  4609. }
  4610. return 1;
  4611. }
  4612. CMD:groupunban(playerid, params[])
  4613. {
  4614. if(PlayerInfo[playerid][pAdmin] >= 1337)
  4615. {
  4616. new giveplayerid, group;
  4617. if(sscanf(params, "ud", giveplayerid, group)) return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /groupunban [player] [groupid]");
  4618. if(IsPlayerConnected(giveplayerid))
  4619. {
  4620. new string[256];
  4621. SetPVarInt(playerid, "GroupUnBanningPlayer", giveplayerid);
  4622. SetPVarInt(playerid, "GroupUnBanningGroup", group);
  4623. mysql_format(MainPipeline, string,sizeof(string),"DELETE FROM `groupbans` WHERE `PlayerID` = %d AND `GroupBan` = %d", GetPlayerSQLId(giveplayerid), group);
  4624. mysql_tquery(MainPipeline, string, "Group_QueryFinish", "ii", GROUP_QUERY_UNBAN, playerid);
  4625. format(string, sizeof(string), "Attempting to unban %s from group %d...", GetPlayerNameEx(giveplayerid), group);
  4626. SendClientMessageEx(playerid, COLOR_WHITE, string);
  4627. }
  4628. else
  4629. {
  4630. SendClientMessageEx(playerid, COLOR_GREY, "Player not connected.");
  4631. }
  4632. }
  4633. return 1;
  4634. }
  4635. CMD:groupcsfunban(playerid, params[])
  4636. {
  4637. if(PlayerInfo[playerid][pAdmin] >= 1337)
  4638. {
  4639. new string[128], giveplayerid;
  4640. if(sscanf(params, "u", giveplayerid)) return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /faccsfunban [player]");
  4641. if(IsPlayerConnected(giveplayerid))
  4642. {
  4643. if( PlayerInfo[giveplayerid][pCSFBanned] == 0 ) return SendClientMessageEx( playerid, COLOR_WHITE, "That person isn't banned from Civil Service Groups." );
  4644. PlayerInfo[giveplayerid][pCSFBanned] = 0;
  4645. format(string, sizeof(string), "You have unbanned person %s from all Civil Service Groups.", GetPlayerNameEx(giveplayerid));
  4646. SendClientMessageEx(playerid, COLOR_WHITE, string);
  4647. format(string, sizeof(string), "You have been unbanned from Civil Service Groups, by %s.", GetPlayerNameEx(playerid));
  4648. SendClientMessageEx(giveplayerid, COLOR_WHITE, string);
  4649. }
  4650. else
  4651. {
  4652. SendClientMessageEx(playerid, COLOR_GREY, "Player not connected.");
  4653. }
  4654. }
  4655. return 1;
  4656. }
  4657. CMD:groupban(playerid, params[])
  4658. {
  4659. if(PlayerInfo[playerid][pAdmin] >= 4 || PlayerInfo[playerid][pASM] >= 1 || PlayerInfo[playerid][pFactionModerator] >= 1)
  4660. {
  4661. new giveplayerid, group , reason[64];
  4662. if(sscanf(params, "uds[64]", giveplayerid, group, reason))
  4663. {
  4664. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /groupban [player] [group id] [reason]");
  4665. return 1;
  4666. }
  4667. if(IsPlayerConnected(giveplayerid))
  4668. {
  4669. if( group >= 0 && group < MAX_GROUPS )
  4670. {
  4671. SetPVarInt(playerid, "GroupBanningPlayer", giveplayerid);
  4672. SetPVarInt(playerid, "GroupBanningGroup", group);
  4673. new string[256];
  4674. mysql_format(MainPipeline, string,sizeof(string),"INSERT INTO `groupbans` (`PlayerID`, `GroupBan`, `BanReason`, `BanDate`) VALUES (%d, %d, '%e', NOW())", GetPlayerSQLId(giveplayerid), group, reason);
  4675. mysql_tquery(MainPipeline, string, "Group_QueryFinish", "ii", GROUP_QUERY_ADDBAN, playerid);
  4676. format(string, sizeof(string), "Attempting to ban %s from group %d...", GetPlayerNameEx(giveplayerid), group);
  4677. SendClientMessageEx(playerid, COLOR_WHITE, string);
  4678. }
  4679. else
  4680. {
  4681. SendClientMessageEx(playerid, COLOR_GREY, "Invalid group id.");
  4682. }
  4683. }
  4684. else
  4685. {
  4686. SendClientMessageEx(playerid, COLOR_GREY, "Player not connected.");
  4687. }
  4688. }
  4689. return 1;
  4690. }
  4691. CMD:showbadge(playerid, params[])
  4692. {
  4693. if(0 <= PlayerInfo[playerid][pMember] < MAX_GROUPS && (arrGroupData[PlayerInfo[playerid][pMember]][g_iGroupType] != GROUP_TYPE_CRIMINAL && arrGroupData[PlayerInfo[playerid][pMember]][g_iCrimeType] != GROUP_CRIMINAL_TYPE_RACE))
  4694. {
  4695. new string[128], giveplayerid;
  4696. if(sscanf(params, "u", giveplayerid)) return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /showbadge [player]");
  4697. if(giveplayerid != INVALID_PLAYER_ID) {
  4698. if(ProxDetectorS(5.0, playerid, giveplayerid)) {
  4699. new infoArrays[3][GROUP_MAX_NAME_LEN], badge[11];
  4700. GetPlayerGroupInfo(playerid, infoArrays[0], infoArrays[1], infoArrays[2]);
  4701. if(strcmp(PlayerInfo[playerid][pBadge], "None", true) != 0) format(badge, sizeof(badge), "[%s] ", PlayerInfo[playerid][pBadge]);
  4702. SendClientMessageEx(giveplayerid, COLOR_GRAD2, "----------------------------------------------------------------------------------------------------");
  4703. format(string, sizeof(string), "%s%s %s is a duly sworn member of the %s.", badge, infoArrays[0], GetPlayerNameEx(playerid), infoArrays[2]);
  4704. SendClientMessageEx(giveplayerid, COLOR_WHITE, string);
  4705. format(string, sizeof(string), "Current Assignment: %s.", infoArrays[1]);
  4706. SendClientMessageEx(giveplayerid, COLOR_WHITE, string);
  4707. switch(arrGroupData[PlayerInfo[playerid][pMember]][g_iAllegiance]) {
  4708. case 1: SendClientMessageEx(giveplayerid, COLOR_WHITE, "Under the Authority of the San Andreas Government.");
  4709. case 2: SendClientMessageEx(giveplayerid, COLOR_WHITE, "Under the Authority of the Nation of New Robada.");
  4710. }
  4711. if(IsACop(playerid)) SendClientMessageEx(giveplayerid, COLOR_WHITE, "Official has the authority to arrest.");
  4712. else if(arrGroupData[PlayerInfo[playerid][pMember]][g_iGroupType] != 2) SendClientMessageEx(giveplayerid, COLOR_WHITE, "Official has the authority to assist in arrests.");
  4713. SendClientMessageEx(giveplayerid, COLOR_GRAD2, "----------------------------------------------------------------------------------------------------");
  4714. format(string, sizeof(string), "* %s shows their badge to %s.", GetPlayerNameEx(playerid), GetPlayerNameEx(giveplayerid));
  4715. ProxChatBubble(playerid, string);
  4716. // ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
  4717. } else SendClientMessageEx(playerid, COLOR_GREY, "That person isn't near you.");
  4718. } else SendClientMessageEx(playerid, COLOR_GRAD1, "Invalid player specified.");
  4719. } else SendClientMessageEx(playerid, COLOR_WHITE, "You are not in a civil service group.");
  4720. return 1;
  4721. }
  4722. CMD:groupkick(playerid, params[])
  4723. {
  4724. if(PlayerInfo[playerid][pAdmin] >= 4 || PlayerInfo[playerid][pASM] >= 1 || PlayerInfo[playerid][pFactionModerator] >= 1)
  4725. {
  4726. new string[128], giveplayerid;
  4727. if(sscanf(params, "u", giveplayerid)) return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /groupkick [player]");
  4728. if(IsPlayerConnected(giveplayerid))
  4729. {
  4730. if(PlayerInfo[giveplayerid][pMember] >= 0 || PlayerInfo[giveplayerid][pLeader] >= 0)
  4731. {
  4732. format(string, sizeof(string), "Administrator %s has group-kicked %s (%d) from %s (%d)", GetPlayerNameEx(playerid), GetPlayerNameEx(giveplayerid), GetPlayerSQLId(giveplayerid), arrGroupData[PlayerInfo[giveplayerid][pMember]][g_szGroupName], PlayerInfo[giveplayerid][pMember]+1);
  4733. GroupLog(PlayerInfo[giveplayerid][pMember], string);
  4734. format(string, sizeof(string), "You have been faction-kicked, by %s.", GetPlayerNameEx( playerid ));
  4735. SendClientMessageEx(giveplayerid, COLOR_LIGHTBLUE, string);
  4736. arrGroupData[PlayerInfo[giveplayerid][pMember]][g_iMemberCount]--;
  4737. PlayerInfo[giveplayerid][pDuty] = 0;
  4738. PlayerInfo[giveplayerid][pMember] = INVALID_GROUP_ID;
  4739. PlayerInfo[giveplayerid][pRank] = INVALID_RANK;
  4740. PlayerInfo[giveplayerid][pLeader] = INVALID_GROUP_ID;
  4741. PlayerInfo[giveplayerid][pDivision] = INVALID_DIVISION;
  4742. strcpy(PlayerInfo[giveplayerid][pBadge], "None", 9);
  4743. if(!IsValidSkin(GetPlayerSkin(giveplayerid)))
  4744. {
  4745. new rand = random(sizeof(CIV));
  4746. SetPlayerSkin(giveplayerid,CIV[rand]);
  4747. PlayerInfo[giveplayerid][pModel] = CIV[rand];
  4748. }
  4749. player_remove_vip_toys(giveplayerid);
  4750. pTazer{giveplayerid} = 0;
  4751. DeletePVar(giveplayerid, "HidingKnife");
  4752. SetPlayerToTeamColor(giveplayerid);
  4753. format(string, sizeof(string), "You have group-kicked %s.", GetPlayerNameEx(giveplayerid));
  4754. SendClientMessageEx(playerid, COLOR_WHITE, string);
  4755. if(GetPVarType(giveplayerid, "RepFam_TL")) Rivalry_Toggle(giveplayerid, false);
  4756. }
  4757. else
  4758. {
  4759. SendClientMessageEx(playerid, COLOR_WHITE, "You can't kick someone from a group if they're not a member.");
  4760. }
  4761. }
  4762. else
  4763. {
  4764. SendClientMessageEx(playerid, COLOR_GREY, "Invalid player specified.");
  4765. }
  4766. }
  4767. return 1;
  4768. }
  4769. CMD:m(playerid, params[]) {
  4770. if(PlayerInfo[playerid][pJailTime] && strfind(PlayerInfo[playerid][pPrisonReason], "[OOC]", true) != -1) return SendClientMessageEx(playerid, COLOR_GREY, "OOC prisoners are restricted to only speak in /b");
  4771. if(!isnull(params)) {
  4772. if(IsACop(playerid) || IsAMedic(playerid) || IsAHitman(playerid) || IsAGovernment(playerid) || IsAJudge(playerid) || (IsATowman(playerid) && PlayerInfo[playerid][pRank] > 1)) {
  4773. new
  4774. szMessage[128];
  4775. format(szMessage, sizeof(szMessage), "(megaphone) %s: %s", GetPlayerNameEx(playerid), params);
  4776. ProxDetector(60.0, playerid, szMessage, COLOR_YELLOW, COLOR_YELLOW, COLOR_YELLOW, COLOR_YELLOW, COLOR_YELLOW,1);
  4777. }
  4778. else SendClientMessageEx(playerid, COLOR_GRAD2, " You do not have authority to use the megaphone.");
  4779. }
  4780. else SendClientMessageEx(playerid, COLOR_GREY, "USAGE: (/m)egaphone [megaphone chat]");
  4781. return 1;
  4782. }
  4783. CMD:radio(playerid, params[]) {
  4784. return cmd_r(playerid, params);
  4785. }
  4786. CMD:r(playerid, params[]) {
  4787. if(PlayerTied[playerid] != 0 || PlayerCuffed[playerid] != 0 || PlayerInfo[playerid][pJailTime] > 0) return SendClientMessageEx(playerid, COLOR_GRAD2, "You cannot do this at this time.");
  4788. if(PlayerInfo[playerid][pJailTime] && strfind(PlayerInfo[playerid][pPrisonReason], "[OOC]", true) != -1) return SendClientMessageEx(playerid, COLOR_GREY, "OOC prisoners are restricted to only speak in /b");
  4789. new
  4790. iGroupID = PlayerInfo[playerid][pMember],
  4791. iRank = PlayerInfo[playerid][pRank];
  4792. if (0 <= iGroupID < MAX_GROUPS) {
  4793. if (iRank >= arrGroupData[iGroupID][g_iRadioAccess]) {
  4794. if(PlayerInfo[playerid][pToggledChats][12] == 0) {
  4795. if(!isnull(params))
  4796. {
  4797. new string[128], employer[GROUP_MAX_NAME_LEN], rank[GROUP_MAX_RANK_LEN], division[GROUP_MAX_DIV_LEN];
  4798. format(string, sizeof(string), "(radio) %s", params);
  4799. SetPlayerChatBubble(playerid, string, COLOR_WHITE, 15.0, 5000);
  4800. GetPlayerGroupInfo(playerid, rank, division, employer);
  4801. if(strcmp(PlayerInfo[playerid][pBadge], "None", true) != 0) format(string, sizeof(string), "** [%s] %s %s: %s **", PlayerInfo[playerid][pBadge], rank, GetPlayerNameEx(playerid), params);
  4802. else format(string, sizeof(string), "** %s (%s) %s: %s **", rank, division, GetPlayerNameEx(playerid), params);
  4803. foreach(new i: Player)
  4804. {
  4805. if(PlayerInfo[playerid][pToggledChats][12] == 0)
  4806. {
  4807. if(PlayerInfo[i][pMember] == iGroupID && iRank >= arrGroupData[iGroupID][g_iRadioAccess]) {
  4808. ChatTrafficProcess(i, arrGroupData[iGroupID][g_hRadioColour] * 256 + 255, string, 12);
  4809. }
  4810. if(GetPVarInt(i, "BigEar") == 4 && GetPVarInt(i, "BigEarGroup") == iGroupID) {
  4811. new szBigEar[128];
  4812. format(szBigEar, sizeof(szBigEar), "(BE) %s", string);
  4813. ChatTrafficProcess(i, arrGroupData[iGroupID][g_hRadioColour] * 256 + 255, szBigEar, 12);
  4814. }
  4815. }
  4816. }
  4817. }
  4818. else return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: (/r)adio [radio chat]");
  4819. }
  4820. else return SendClientMessageEx(playerid, COLOR_GREY, "Your radio is currently turned off, type /tog radio to turn it back on.");
  4821. }
  4822. else return SendClientMessageEx(playerid, COLOR_GREY, "You do not have access to this radio frequency.");
  4823. }
  4824. else return SendClientMessageEx(playerid, COLOR_GREY, "You are not in a group.");
  4825. return 1;
  4826. }
  4827. CMD:int(playerid, params[])
  4828. {
  4829. return cmd_international(playerid, params);
  4830. }
  4831. CMD:togint(playerid, params[]) {
  4832. if(PlayerInfo[playerid][pToggledChats][21]) {
  4833. PlayerInfo[playerid][pToggledChats][21] = 0;
  4834. SendClientMessageEx(playerid, COLOR_GRAD1, "You toggled the international chat on.");
  4835. }
  4836. else {
  4837. PlayerInfo[playerid][pToggledChats][21] = 1;
  4838. SendClientMessageEx(playerid, COLOR_GRAD1, "You toggled the international chat off.");
  4839. }
  4840. return 1;
  4841. }
  4842. CMD:international(playerid, params[])
  4843. {
  4844. if(PlayerTied[playerid] != 0 || PlayerCuffed[playerid] != 0 || PlayerInfo[playerid][pJailTime] > 0) return SendClientMessageEx(playerid, COLOR_GRAD2, "You cannot do this at this time.");
  4845. if(PlayerInfo[playerid][pJailTime] && strfind(PlayerInfo[playerid][pPrisonReason], "[OOC]", true) != -1) return SendClientMessageEx(playerid, COLOR_GREY, "OOC prisoners are restricted to only speak in /b");
  4846. new iGroupID = PlayerInfo[playerid][pMember],
  4847. iRank = PlayerInfo[playerid][pRank];
  4848. if(PlayerInfo[playerid][pToggledChats][21]) return SendClientMessageEx(playerid, COLOR_GRAD1, "You have the international chat toggled.");
  4849. if(0 <= iGroupID < MAX_GROUPS)
  4850. {
  4851. if(iRank >= arrGroupData[iGroupID][g_iIntRadioAccess])
  4852. {
  4853. if(!isnull(params))
  4854. {
  4855. new szRadio[128], szEmployer[GROUP_MAX_NAME_LEN], szRank[GROUP_MAX_RANK_LEN], szDivision[GROUP_MAX_DIV_LEN];
  4856. GetPlayerGroupInfo(playerid, szRank, szDivision, szEmployer);
  4857. format(szRadio, sizeof(szRadio), "** %s %s (%s) %s: %s **", szEmployer, szRank, szDivision, GetPlayerNameEx(playerid), params);
  4858. foreach(new i: Player)
  4859. {
  4860. if((0 <= PlayerInfo[i][pMember] < MAX_GROUPS) && PlayerInfo[i][pRank] >= arrGroupData[PlayerInfo[i][pMember]][g_iIntRadioAccess]) {
  4861. ChatTrafficProcess(i, 0x869688FF, szRadio, 21);
  4862. }
  4863. }
  4864. format(szRadio, sizeof(szRadio), "(radio) %s", params);
  4865. SetPlayerChatBubble(playerid, szRadio, COLOR_WHITE, 15.0, 5000);
  4866. }
  4867. else return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: (/int(ernational) [text]");
  4868. }
  4869. else return SendClientMessageEx(playerid, COLOR_GREY, "You do not have access to this radio frequency!");
  4870. }
  4871. else return SendClientMessageEx(playerid, COLOR_GREY, "You're not in a group!");
  4872. return 1;
  4873. }
  4874. CMD:togdept(playerid, params[])
  4875. {
  4876. if(PlayerInfo[playerid][pToggledChats][10] == 0)
  4877. {
  4878. SendClientMessageEx(playerid, COLOR_GRAD2, "You have toggled off your department radio, you may re-enable it by typing this command again.");
  4879. PlayerInfo[playerid][pToggledChats][10] = 1;
  4880. }
  4881. else {
  4882. SendClientMessageEx(playerid, COLOR_GRAD2, "You have toggled on your department radio.");
  4883. PlayerInfo[playerid][pToggledChats][10] = 0;
  4884. } return 1;
  4885. }
  4886. CMD:dept(playerid, params[])
  4887. {
  4888. if(PlayerTied[playerid] != 0 || PlayerCuffed[playerid] != 0 || PlayerInfo[playerid][pJailTime] > 0) return SendClientMessageEx(playerid, COLOR_GRAD2, "You cannot do this at this time.");
  4889. if(PlayerInfo[playerid][pJailTime] && strfind(PlayerInfo[playerid][pPrisonReason], "[OOC]", true) != -1) return SendClientMessageEx(playerid, COLOR_GREY, "OOC prisoners are restricted to only speak in /b");
  4890. new
  4891. iGroupID = PlayerInfo[playerid][pMember],
  4892. iRank = PlayerInfo[playerid][pRank];
  4893. if(0 <= iGroupID < MAX_GROUPS)
  4894. {
  4895. if(iRank >= arrGroupData[iGroupID][g_iDeptRadioAccess])
  4896. {
  4897. if(PlayerInfo[playerid][pToggledChats][10] == 0)
  4898. {
  4899. if(!isnull(params))
  4900. {
  4901. new szRadio[128], RadioBubble[128], szEmployer[GROUP_MAX_NAME_LEN], szRank[GROUP_MAX_RANK_LEN], szDivision[GROUP_MAX_DIV_LEN];
  4902. GetPlayerGroupInfo(playerid, szRank, szDivision, szEmployer);
  4903. if(strcmp(PlayerInfo[playerid][pBadge], "None", true) != 0) format(szRadio, sizeof(szRadio), "** [%s] %s %s %s: %s **", PlayerInfo[playerid][pBadge], szEmployer, szRank, GetPlayerNameEx(playerid), params);
  4904. else format(szRadio, sizeof(szRadio), "** %s %s (%s) %s: %s **", szEmployer, szRank, szDivision, GetPlayerNameEx(playerid), params);
  4905. format(RadioBubble, sizeof(RadioBubble), "(radio) %s",params);
  4906. SetPlayerChatBubble(playerid, RadioBubble, COLOR_WHITE, 15.0, 5000);
  4907. foreach(new i: Player)
  4908. {
  4909. if(PlayerInfo[playerid][pToggledChats][10] == 0)
  4910. {
  4911. if((0 <= PlayerInfo[i][pMember] < MAX_GROUPS) && PlayerInfo[i][pRank] >= arrGroupData[PlayerInfo[i][pMember]][g_iDeptRadioAccess] && arrGroupData[iGroupID][g_iAllegiance] == arrGroupData[PlayerInfo[i][pMember]][g_iAllegiance])
  4912. {
  4913. ChatTrafficProcess(i, DEPTRADIO, szRadio, 10);
  4914. }
  4915. else if(GetPVarInt(i, "BigEar") == 4 && GetPVarInt(i, "BigEarGroup") == iGroupID)
  4916. {
  4917. new szBigEar[128];
  4918. format(szBigEar, sizeof(szBigEar), "(BE) %s", szRadio);
  4919. ChatTrafficProcess(i, iGroupID, szBigEar, 10);
  4920. }
  4921. else if((PlayerInfo[i][pMember] == INVALID_GROUP_ID || (0 <= PlayerInfo[i][pMember] < MAX_GROUPS) && PlayerInfo[i][pRank] < arrGroupData[PlayerInfo[i][pMember]][g_iDeptRadioAccess]) && PlayerInfo[i][pReceiver] > 0)
  4922. {
  4923. if(GetPVarType(i, "pReceiverOn"))
  4924. {
  4925. if(GetPVarInt(i, "pReceiverMLeft") > 0)
  4926. {
  4927. format(szRadio, sizeof(szRadio), "** (receiver) %s: %s", GetPlayerNameEx(playerid), params);
  4928. ChatTrafficProcess(i, DEPTRADIO, szRadio, 10);
  4929. SetPVarInt(i, "pReceiverMLeft", GetPVarInt(i, "pReceiverMLeft") - 1);
  4930. }
  4931. else
  4932. {
  4933. PlayerInfo[i][pReceiver]--;
  4934. SetPVarInt(i, "pReceiverMLeft", 4);
  4935. return SendClientMessageEx(i, DEPTRADIO, "Your receiver ran out of batteries!");
  4936. }
  4937. }
  4938. }
  4939. }
  4940. }
  4941. }
  4942. else return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: (/dept) [department chat]");
  4943. }
  4944. else return SendClientMessageEx(playerid, COLOR_GREY, "Your department radio is currently turned off, turn it on by typing /togdept.");
  4945. }
  4946. else return SendClientMessageEx(playerid, COLOR_GREY, "You do not have access to this radio frequency.");
  4947. }
  4948. else return SendClientMessageEx(playerid, COLOR_GREY, "You are not in a group.");
  4949. return 1;
  4950. }
  4951. CMD:togradio(playerid, params[])
  4952. {
  4953. if(PlayerInfo[playerid][pToggledChats][12] == 0)
  4954. {
  4955. SendClientMessageEx(playerid, COLOR_GRAD2, "You have toggled off your radio, you may re-enable it by typing this command again.");
  4956. PlayerInfo[playerid][pToggledChats][12] = 1;
  4957. }
  4958. else {
  4959. SendClientMessageEx(playerid, COLOR_GRAD2, "You have toggled on your radio.");
  4960. PlayerInfo[playerid][pToggledChats][12] = 0;
  4961. } return 1;
  4962. }
  4963. CMD:makeleader(playerid, params[])
  4964. {
  4965. if (PlayerInfo[playerid][pAdmin] >= 4 || PlayerInfo[playerid][pASM] >= 1 || PlayerInfo[playerid][pFactionModerator] >= 2)
  4966. {
  4967. new giveplayerid;
  4968. if(sscanf(params, "u", giveplayerid)) {
  4969. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /makeleader [player]");
  4970. }
  4971. else {
  4972. if(IsPlayerConnected(giveplayerid)) {
  4973. SetPVarInt(playerid, "MakingLeader", giveplayerid);
  4974. SetPVarInt(playerid, "MakingLeaderSQL", GetPlayerSQLId(giveplayerid));
  4975. Group_ListGroups(playerid, DIALOG_MAKELEADER);
  4976. }
  4977. else SendClientMessageEx(playerid, COLOR_GREY, "Invalid player specified.");
  4978. }
  4979. }
  4980. else SendClientMessageEx(playerid, COLOR_GRAD1, "You are not authorized to use that command.");
  4981. return 1;
  4982. }
  4983. CMD:leaders(playerid, params[])
  4984. {
  4985. if(PlayerInfo[playerid][pAdmin] >= 3 || PlayerInfo[playerid][pFactionModerator] >= 1) {
  4986. SendClientMessageEx(playerid, COLOR_WHITE, "Group leaders online:");
  4987. new string[128], sz_FacInfo[3][64];
  4988. foreach(new i: Player)
  4989. {
  4990. if(PlayerInfo[i][pLeader] >= 0) {
  4991. GetPlayerGroupInfo(i, sz_FacInfo[0], sz_FacInfo[1], sz_FacInfo[2]);
  4992. format(string, sizeof(string), "(%s) %s %s", sz_FacInfo[2], sz_FacInfo[0], GetPlayerNameEx(i));
  4993. SendClientMessageEx(playerid, COLOR_GRAD2, string);
  4994. }
  4995. }
  4996. } else SendClientMessageEx(playerid, COLOR_GRAD1, "You are not authorized to use that command.");
  4997. return 1;
  4998. }
  4999. CMD:hfind(playerid, params[])
  5000. {
  5001. if (IsAHitman(playerid) || (PlayerInfo[playerid][pMember] != INVALID_GROUP_ID && PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iFindAccess]) || (PlayerInfo[playerid][pAdmin] >= 2 && PlayerInfo[playerid][pTogReports] != 1))
  5002. {
  5003. if(GetPVarType(playerid, "HfindCount")) {
  5004. SendClientMessageEx(playerid, COLOR_GRAD2, "Tracing interrupted.");
  5005. DeletePVar(playerid, "HfindCount");
  5006. return 1;
  5007. }
  5008. if(GetPVarType(playerid, "hFind")) {
  5009. SendClientMessageEx(playerid, COLOR_GRAD2, "Stopped Updating");
  5010. DeletePVar(playerid, "hFind");
  5011. DisablePlayerCheckpoint(playerid);
  5012. }
  5013. else
  5014. {
  5015. new iTargetID;
  5016. if(CheckPointCheck(playerid)) {
  5017. return SendClientMessageEx(playerid, COLOR_GREY, "You cannot use this command as of this moment!");
  5018. }
  5019. if(sscanf(params, "u", iTargetID)) {
  5020. return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /hfind [player]");
  5021. }
  5022. else if(iTargetID == playerid) {
  5023. return SendClientMessageEx(playerid, COLOR_GREY, "You can't use this command on yourself.");
  5024. }
  5025. else if(!IsPlayerConnected(iTargetID)) {
  5026. return SendClientMessageEx(playerid, COLOR_GREY, "Invalid player specified.");
  5027. }
  5028. else if(GetPlayerInterior(iTargetID) != 0) {
  5029. return SendClientMessageEx(playerid, COLOR_GREY, "That person is inside an interior.");
  5030. }
  5031. else if((PlayerInfo[iTargetID][pAdmin] >= 2 || PlayerInfo[iTargetID][pWatchdog] >= 2) && PlayerInfo[iTargetID][pTogReports] != 1) {
  5032. return SendClientMessageEx(playerid, COLOR_GREY, "You are unable to find this person.");
  5033. }
  5034. else if (GetPVarInt(playerid, "_SwimmingActivity") >= 1) {
  5035. return SendClientMessageEx(playerid, COLOR_GRAD2, "You are unable to find people while swimming.");
  5036. }
  5037. if (GetPVarInt(playerid, "_SwimmingActivity") >= 1)
  5038. {
  5039. SendClientMessageEx(playerid, COLOR_GRAD2, " You must stop swimming first! (/stopswimming)");
  5040. return 1;
  5041. }
  5042. if(PhoneOnline[iTargetID] == 0 && PlayerInfo[iTargetID][pPnumber] != 0 || (PlayerInfo[iTargetID][pBugged] == PlayerInfo[playerid][pMember] || (PlayerInfo[playerid][pAdmin] >= 2 && PlayerInfo[playerid][pTogReports] != 1)))
  5043. {
  5044. SetPVarInt(playerid, "HfindCount", 15);
  5045. SendClientMessageEx(playerid, COLOR_WHITE, "You have started a trace, type /hfind again to stop this.");
  5046. SetTimerEx("HitmanTrace", 1000, false, "ii", playerid, iTargetID);
  5047. }
  5048. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You are unable to get a trace on this person.");
  5049. }
  5050. }
  5051. else SendClientMessageEx(playerid, COLOR_GRAD1, "You are not authorized to use that command.");
  5052. return 1;
  5053. }
  5054. forward HitmanTrace(playerid, iTargetID);
  5055. public HitmanTrace(playerid, iTargetID) {
  5056. new iTraceCount = GetPVarInt(playerid, "HfindCount");
  5057. if(PlayerInfo[iTargetID][pBugged] == PlayerInfo[playerid][pMember]) iTraceCount = 0;
  5058. if(CheckPointCheck(playerid)) return SendClientMessageEx(playerid, COLOR_GREY, "You cannot use this command as of this moment!");
  5059. if(!IsPlayerConnected(iTargetID)) return SendClientMessageEx(playerid, COLOR_GREY, "Invalid player specified.");
  5060. if(GetPlayerInterior(iTargetID) != 0) return SendClientMessageEx(playerid, COLOR_GREY, "That person is inside an interior.");
  5061. if((PlayerInfo[iTargetID][pAdmin] >= 2 || PlayerInfo[iTargetID][pWatchdog] >= 2) && PlayerInfo[iTargetID][pTogReports] != 1) return SendClientMessageEx(playerid, COLOR_GREY, "You are unable to find this person.");
  5062. if(GetPVarInt(playerid, "_SwimmingActivity") >= 1) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are unable to find people while swimming.");
  5063. if (GetPVarInt(playerid, "_SwimmingActivity") >= 1) return SendClientMessageEx(playerid, COLOR_GRAD2, " You must stop swimming first! (/stopswimming)");
  5064. if((PhoneOnline[iTargetID] > 0 || PlayerInfo[iTargetID][pPnumber] == 0 ) && PlayerInfo[iTargetID][pBugged] != PlayerInfo[playerid][pMember]) return SendClientMessageEx(playerid, COLOR_GREY, "The trace was interrupted.");
  5065. if(!GetPVarType(playerid, "HfindCount")) return SendClientMessageEx(playerid, COLOR_WHITE, "An error occured!");
  5066. if(iTraceCount >= 1) {
  5067. SetPVarInt(playerid, "HfindCount", --iTraceCount);
  5068. format(szMiscArray, sizeof(szMiscArray), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~r~Correlating Signal: %d seconds left", iTraceCount);
  5069. GameTextForPlayer(playerid, szMiscArray, 1100, 3);
  5070. SetTimerEx("HitmanTrace", 1000, false, "ii", playerid, iTargetID);
  5071. }
  5072. else if(iTraceCount == 0) {
  5073. GameTextForPlayer(playerid, "Trace established", 1100, 3);
  5074. new
  5075. szZone[MAX_ZONE_NAME],
  5076. szMessage[108];
  5077. new Float:X, Float:Y, Float:Z;
  5078. GetPlayerPos(iTargetID, X, Y, Z);
  5079. DisablePlayerCheckpoint(playerid);
  5080. SetPlayerCheckpoint(playerid, X, Y, Z, 4.0);
  5081. GetPlayer3DZone(iTargetID, szZone, sizeof(szZone));
  5082. format(szMessage, sizeof(szMessage), "Tracking on %s, last seen at %s.", GetPlayerNameEx(iTargetID), szZone);
  5083. SendClientMessageEx(playerid, COLOR_GRAD2, szMessage);
  5084. SendClientMessageEx(playerid, COLOR_GRAD2, "Type /hfind again to stop tracking.");
  5085. SetPVarInt(playerid, "hFind", iTargetID);
  5086. DeletePVar(playerid, "HfindCount");
  5087. }
  5088. return 1;
  5089. }
  5090. CMD:f(playerid, params[]) return cmd_g(playerid, params);
  5091. CMD:g(playerid, params[])
  5092. {
  5093. if(PlayerTied[playerid] != 0 || PlayerCuffed[playerid] != 0 || PlayerInfo[playerid][pJailTime] > 0) return SendClientMessageEx(playerid, COLOR_GRAD2, "You cannot do this at this time.");
  5094. if(PlayerInfo[playerid][pJailTime] && strfind(PlayerInfo[playerid][pPrisonReason], "[OOC]", true) != -1) return SendClientMessageEx(playerid, COLOR_GREY, "OOC prisoners are restricted to only speak in /b");
  5095. new iGroupID = PlayerInfo[playerid][pMember],
  5096. iRank = PlayerInfo[playerid][pRank];
  5097. if(isnull(params)) return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: (/g)roup [group chat]");
  5098. if(iGroupID == INVALID_GROUP_ID) return SendClientMessageEx(playerid, COLOR_GRAD2, "You're not a part of a group!");
  5099. if(iRank >= arrGroupData[iGroupID][g_iOOCChat])
  5100. {
  5101. new string[128];
  5102. format(string, sizeof(string), "** (%d) %s (%s) %s: %s **", iRank, arrGroupRanks[iGroupID][iRank], (0 <= PlayerInfo[playerid][pDivision] < MAX_GROUP_DIVS && arrGroupDivisions[iGroupID][PlayerInfo[playerid][pDivision]][0] ? arrGroupDivisions[iGroupID][PlayerInfo[playerid][pDivision]]:("None")), GetPlayerNameEx(playerid), params);
  5103. foreach(new i: Player) {
  5104. if(PlayerInfo[i][pMember] == iGroupID && GetPVarInt(i, "OOCRadioTogged") == 0) {
  5105. ChatTrafficProcess(i, arrGroupData[iGroupID][g_hOOCColor] * 256 + 255, string, 11);
  5106. }
  5107. }
  5108. }
  5109. else SendClientMessageEx(playerid, COLOR_GREY, "You cannot use this command.");
  5110. return 1;
  5111. }
  5112. CMD:togfam(playerid, params[])
  5113. {
  5114. if(PlayerInfo[playerid][pToggledChats][11] == 1)
  5115. {
  5116. DeletePVar(playerid, "OOCRadioTogged");
  5117. SendClientMessageEx(playerid, COLOR_WHITE, "You have enabled your OOC group chat. ");
  5118. PlayerInfo[playerid][pToggledChats][11] = 0;
  5119. }
  5120. else
  5121. {
  5122. SetPVarInt(playerid, "OOCRadioTogged", 1);
  5123. SendClientMessage(playerid, COLOR_WHITE, "You have disabled your OOC group chat.");
  5124. PlayerInfo[playerid][pToggledChats][11] = 1;
  5125. }
  5126. return 1;
  5127. }
  5128. CMD:locker(playerid, params[]) {
  5129. new
  5130. iGroupID = PlayerInfo[playerid][pMember],
  5131. szTitle[18 + GROUP_MAX_NAME_LEN],
  5132. szDialog[172];
  5133. if(PlayerInfo[playerid][pWRestricted] != 0 || PlayerInfo[playerid][pConnectHours] < 2) return SendClientMessageEx(playerid, COLOR_GRAD1, "You cannot use this command while having a weapon restriction.");
  5134. if(HungerPlayerInfo[playerid][hgInEvent] != 0) return SendClientMessageEx(playerid, COLOR_GREY, " You cannot do this while being in the Hunger Games Event!");
  5135. if(zombieevent && GetPVarType(playerid, "pIsZombie")) return SendClientMessageEx(playerid, COLOR_GREY, "You cannot use this as a Zombie.");
  5136. if(0 <= iGroupID < MAX_GROUPS)
  5137. {
  5138. for(new i; i < MAX_GROUPS; i++)
  5139. {
  5140. for(new j; j < MAX_GROUP_LOCKERS; j++)
  5141. {
  5142. if(IsPlayerInRangeOfPoint(playerid, 3.0, arrGroupLockers[i][j][g_fLockerPos][0], arrGroupLockers[i][j][g_fLockerPos][1], arrGroupLockers[i][j][g_fLockerPos][2]) && arrGroupLockers[i][j][g_iLockerVW] == GetPlayerVirtualWorld(playerid))
  5143. {
  5144. if(i == iGroupID || (arrGroupData[i][g_iGroupType] == arrGroupData[iGroupID][g_iGroupType] && arrGroupLockers[i][j][g_iLockerShare]))
  5145. {
  5146. format(szTitle, sizeof(szTitle), "%s Locker Menu", arrGroupData[iGroupID][g_szGroupName]);
  5147. if(arrGroupData[iGroupID][g_iLockerCostType] == 0) {
  5148. if(arrGroupData[iGroupID][g_iLockerStock] > 100)
  5149. {
  5150. format(szTitle, sizeof(szTitle), "%s - Locker Stock: %d", szTitle, arrGroupData[iGroupID][g_iLockerStock]);
  5151. }
  5152. else
  5153. {
  5154. format(szTitle, sizeof(szTitle), "%s - {AA3333}Locker Stock: %d", szTitle, arrGroupData[iGroupID][g_iLockerStock]);
  5155. }
  5156. }
  5157. if(arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_CRIMINAL /*|| arrGroupData[iGroupID][g_iGroupType] == GROUP_CRIMINAL_TYPE_RACE*/)
  5158. {
  5159. format(szDialog, sizeof(szDialog), "Clothes\nWeapons\nCrate Transfer\nDrugs\nMaterials (%i)\nVault ($%s)",
  5160. arrGroupData[iGroupID][g_iMaterials],
  5161. number_format(arrGroupData[iGroupID][g_iBudget])
  5162. );
  5163. return ShowPlayerDialogEx(playerid, G_LOCKER_MAIN, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  5164. }
  5165. /* if(arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_CRIMINAL || arrGroupData[iGroupID][g_iGroupType] == GROUP_CRIMINAL_TYPE_RACE)
  5166. {
  5167. format(szDialog, sizeof(szDialog), "Clothes\nWeapons\nCannabis (%i)\nCrack (%i)\nHeroin (%i)\nSyringes (%i)\nOpium (%i)\nMaterials (%i)\nVault ($%s)\nAmmo",
  5168. arrGroupData[iGroupID][g_iPot],
  5169. arrGroupData[iGroupID][g_iCrack],
  5170. arrGroupData[iGroupID][g_iHeroin],
  5171. arrGroupData[iGroupID][g_iSyringes],
  5172. arrGroupData[iGroupID][g_iOpium],
  5173. arrGroupData[iGroupID][g_iMaterials],
  5174. number_format(arrGroupData[iGroupID][g_iBudget])
  5175. );
  5176. return ShowPlayerDialogEx(playerid, G_LOCKER_MAIN, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  5177. }*/
  5178. if(PlayerInfo[playerid][pRank] >= arrGroupData[iGroupID][g_iFreeNameChange] && (PlayerInfo[playerid][pDivision] == arrGroupData[iGroupID][g_iFreeNameChangeDiv] || arrGroupData[iGroupID][g_iFreeNameChangeDiv] == INVALID_DIVISION)) // name-change point in faction lockers for free namechange factions
  5179. {
  5180. format(szDialog, sizeof(szDialog), "Duty\nWeapons\nCrate Transfer\nUniform%s", (arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_LEA) ? ("\nClear Suspect\nFirst Aid & Kevlar\nPortable Medkit & Vest Kit\nTazer & Cuffs\nName Change\nAccessories") : ((arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_MEDIC || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_GOV) ? ("\nPortable Medkit & Vest Kit\nFirst Aid & Kevlar\nName Change") : ("")));
  5181. }
  5182. else if(arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_GOV) {
  5183. format(szDialog, sizeof(szDialog), "Duty\nWeapons\nCrate Transfer\nUniform\nPortable Medkit & Vest Kit\nFirst Aid & Kevlar");
  5184. }
  5185. else
  5186. {
  5187. format(szDialog, sizeof(szDialog), "Duty\nWeapons\nCrate Transfer\nUniform%s", (arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_LEA) ? ("\nClear Suspect\nFirst Aid & Kevlar\nPortable Medkit & Vest Kit\nTazer & Cuffs\nAccessories") : ((arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_MEDIC || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_NEWS || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_GOV || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_TOWING) ? ("\nPortable Medkit & Vest Kit\nFirst Aid & Kevlar") : ("")));
  5188. }
  5189. ShowPlayerDialogEx(playerid, G_LOCKER_MAIN, DIALOG_STYLE_LIST, szTitle, szDialog, "Select", "Cancel");
  5190. return 1;
  5191. }
  5192. else
  5193. {
  5194. SendClientMessageEx(playerid, COLOR_GREY, "You can't access this locker.");
  5195. return 1;
  5196. }
  5197. }
  5198. }
  5199. }
  5200. }
  5201. SendClientMessageEx(playerid, COLOR_GREY, "You're not near a locker!");
  5202. return 1;
  5203. }
  5204. CMD:editgroup(playerid, params[]) {
  5205. if(PlayerInfo[playerid][pAdmin] >= 4 || PlayerInfo[playerid][pASM] >= 1 || PlayerInfo[playerid][pFactionModerator] >= 2)
  5206. {
  5207. Group_ListGroups(playerid);
  5208. }
  5209. return 1;
  5210. }
  5211. CMD:groupaddjurisdiction(playerid, params[]) {
  5212. if(PlayerInfo[playerid][pAdmin] >= 4 || PlayerInfo[playerid][pFactionModerator] >= 2) Group_ListGroups(playerid, DIALOG_GROUP_JURISDICTION_ADD);
  5213. return 1;
  5214. }
  5215. CMD:uninvite(playerid, params[]) {
  5216. if(0 <= PlayerInfo[playerid][pLeader] < MAX_GROUPS) {
  5217. new
  5218. iTargetID,
  5219. iGroupID = PlayerInfo[playerid][pLeader];
  5220. if(sscanf(params, "u", iTargetID)) {
  5221. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /uninvite [player]");
  5222. }
  5223. else if(IsPlayerConnected(iTargetID)) {
  5224. if(iGroupID == PlayerInfo[iTargetID][pMember]) {
  5225. if(playerid == iTargetID) {
  5226. SendClientMessageEx(playerid, COLOR_GREY, "You can't uninvite yourself.");
  5227. }
  5228. else if(PlayerInfo[playerid][pRank] > PlayerInfo[iTargetID][pRank] || PlayerInfo[playerid][pRank] >= Group_GetMaxRank(iGroupID)) {
  5229. new
  5230. szMessage[128],
  5231. iRank = PlayerInfo[playerid][pRank];
  5232. format(szMessage, sizeof szMessage, "%s %s has kicked you out of %s.", arrGroupRanks[iGroupID][iRank], GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_szGroupName]);
  5233. SendClientMessageEx(iTargetID, COLOR_LIGHTBLUE, szMessage);
  5234. SendClientMessageEx(iTargetID, COLOR_WHITE, "You are now a civilian again.");
  5235. format(szMessage, sizeof szMessage, "You have kicked %s out of the group.", GetPlayerNameEx(iTargetID));
  5236. SendClientMessageEx(playerid, COLOR_LIGHTBLUE, szMessage);
  5237. format(szMessage, sizeof szMessage, "%s %s (%d) (rank %i) has uninvited %s (%d) (rank %i) from %s (%i).", arrGroupRanks[iGroupID][iRank], GetPlayerNameEx(playerid), GetPlayerSQLId(playerid), iRank, GetPlayerNameEx(iTargetID), GetPlayerSQLId(iTargetID), PlayerInfo[iTargetID][pRank], arrGroupData[iGroupID][g_szGroupName], iGroupID + 1);
  5238. GroupLog(iGroupID, szMessage);
  5239. arrGroupData[iGroupID][g_iMemberCount]--;
  5240. PlayerInfo[iTargetID][pMember] = INVALID_GROUP_ID;
  5241. PlayerInfo[iTargetID][pDivision] = -1;
  5242. strcpy(PlayerInfo[iTargetID][pBadge], "None", 9);
  5243. PlayerInfo[iTargetID][pLeader] = INVALID_GROUP_ID;
  5244. PlayerInfo[iTargetID][pDuty] = 0;
  5245. PlayerInfo[iTargetID][pRank] = INVALID_RANK;
  5246. PlayerInfo[iTargetID][pModel] = NOOB_SKIN;
  5247. SetPlayerSkin(iTargetID, NOOB_SKIN);
  5248. SetPlayerToTeamColor(iTargetID);
  5249. pTazer{iTargetID} = 0;
  5250. if(GetPVarType(iTargetID, "RepFam_TL")) Rivalry_Toggle(iTargetID, false);
  5251. }
  5252. else SendClientMessageEx(playerid, COLOR_GREY, "You can't do this to a person of equal or higher rank.");
  5253. }
  5254. else SendClientMessageEx(playerid, COLOR_GRAD1, "That person is not in your group.");
  5255. }
  5256. else SendClientMessageEx(playerid, COLOR_GRAD1, "Invalid player specified.");
  5257. }
  5258. else SendClientMessageEx(playerid, COLOR_GRAD1, "Only group leaders may use this command.");
  5259. return 1;
  5260. }
  5261. CMD:ouninvite(playerid, params[]) {
  5262. if(0 <= PlayerInfo[playerid][pLeader] < MAX_GROUPS) {
  5263. if(!isnull(params)) {
  5264. if (IsPlayerConnected(ReturnUser(params)))
  5265. {
  5266. return SendClientMessageEx(playerid, COLOR_GREY, "That person is currently online - use /uninvite.");
  5267. }
  5268. new
  5269. szQuery[96],
  5270. szName[MAX_PLAYER_NAME],
  5271. iPos;
  5272. mysql_escape_string(params, szName);
  5273. mysql_format(MainPipeline, szQuery, sizeof szQuery, "SELECT `Member`, `Rank`, `id` FROM `accounts` WHERE `Username` = '%s'", szName);
  5274. mysql_tquery(MainPipeline, szQuery, "Group_QueryFinish", "ii", GROUP_QUERY_UNCHECK, playerid);
  5275. while((iPos = strfind(szName, "_", false, iPos)) != -1) szName[iPos] = ' ';
  5276. SetPVarString(playerid, "Group_Uninv", szName);
  5277. format(szQuery, sizeof szQuery, "Attempting to remove %s from the group, please wait...", szName);
  5278. SendClientMessageEx(playerid, COLOR_LIGHTBLUE, szQuery);
  5279. }
  5280. else SendClientMessageEx(playerid, COLOR_WHITE, "USAGE: /ouninvite [account name]");
  5281. }
  5282. else SendClientMessageEx(playerid, COLOR_GRAD1, "Only group leaders may use this command.");
  5283. return 1;
  5284. }
  5285. CMD:giverank(playerid, params[]) {
  5286. if(0 <= PlayerInfo[playerid][pLeader] < MAX_GROUPS) {
  5287. new
  5288. iTargetID,
  5289. iRank,
  5290. iGroupID = PlayerInfo[playerid][pLeader],
  5291. szMessage[128];
  5292. if(sscanf(params, "ui", iTargetID, iRank)) {
  5293. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /giverank [player] [rank]");
  5294. }
  5295. else if(!(0 <= iRank <= Group_GetMaxRank(iGroupID))) {
  5296. format(szMessage, sizeof(szMessage), "Invalid rank specified (must be between 0 and %d)", Group_GetMaxRank(iGroupID));
  5297. SendClientMessageEx(playerid, COLOR_GREY, szMessage);
  5298. }
  5299. else if(IsPlayerConnected(iTargetID)) {
  5300. if(iGroupID == PlayerInfo[iTargetID][pMember]) {
  5301. if(iRank == PlayerInfo[iTargetID][pRank]) {
  5302. SendClientMessageEx(playerid, COLOR_GREY, "That person is already of that rank.");
  5303. }
  5304. else if(playerid == iTargetID) {
  5305. SendClientMessageEx(playerid, COLOR_GREY, "You can't change your own rank!");
  5306. }
  5307. if(PlayerInfo[iTargetID][pRank] > PlayerInfo[playerid][pRank])
  5308. {
  5309. SendClientMessageEx(playerid, COLOR_GRAD1, "You cannot perform this command on a higher rank than you!");
  5310. return 1;
  5311. }
  5312. else if(PlayerInfo[playerid][pRank] > PlayerInfo[iTargetID][pRank] || PlayerInfo[playerid][pRank] >= Group_GetMaxRank(iGroupID) || PlayerInfo[playerid][pAdmin] >= 4) {
  5313. format(szMessage, sizeof szMessage, "%s %s has %s you to the rank of %s.", arrGroupRanks[iGroupID][PlayerInfo[playerid][pRank]], GetPlayerNameEx(playerid), ((iRank > PlayerInfo[iTargetID][pRank]) ? ("promoted") : ("demoted")), arrGroupRanks[iGroupID][iRank]);
  5314. SendClientMessageEx(iTargetID, COLOR_LIGHTBLUE, szMessage);
  5315. format(szMessage, sizeof szMessage, "You have %s %s to the rank of %s.", ((iRank > PlayerInfo[iTargetID][pRank]) ? ("promoted") : ("demoted")), GetPlayerNameEx(iTargetID), arrGroupRanks[iGroupID][iRank]);
  5316. SendClientMessageEx(playerid, COLOR_LIGHTBLUE, szMessage);
  5317. format(szMessage, sizeof szMessage, "%s %s (%d) (rank %i) has given %s (%d) rank %i (%s) in %s (%i).", arrGroupRanks[iGroupID][PlayerInfo[playerid][pRank]], GetPlayerNameEx(playerid), GetPlayerSQLId(playerid), PlayerInfo[playerid][pRank], GetPlayerNameEx(iTargetID), GetPlayerSQLId(iTargetID), iRank, arrGroupRanks[iGroupID][iRank], arrGroupData[iGroupID][g_szGroupName], iGroupID + 1);
  5318. GroupLog(iGroupID, szMessage);
  5319. PlayerInfo[iTargetID][pRank] = iRank;
  5320. }
  5321. else SendClientMessageEx(playerid, COLOR_GREY, "You can't do this to a person of equal or higher rank.");
  5322. }
  5323. else SendClientMessageEx(playerid, COLOR_GRAD1, "That person is not in your group.");
  5324. }
  5325. else SendClientMessageEx(playerid, COLOR_GRAD1, "Invalid player specified.");
  5326. }
  5327. else SendClientMessageEx(playerid, COLOR_GRAD1, "Only group leaders may use this command.");
  5328. return 1;
  5329. }
  5330. CMD:setdivname(playerid, params[])
  5331. {
  5332. if(0 <= PlayerInfo[playerid][pLeader] < MAX_GROUPS)
  5333. {
  5334. new
  5335. iDiv,
  5336. iName[GROUP_MAX_DIV_LEN],
  5337. iGroupID = PlayerInfo[playerid][pLeader],
  5338. szMessage[128];
  5339. if(sscanf(params, "is[16]", iDiv, iName))
  5340. {
  5341. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /setdivname [division] [name] -- Use 'none' as name to remove division");
  5342. format(szMessage, sizeof(szMessage), "%s", "0 (None), ");
  5343. for(new i; i < MAX_GROUP_DIVS; i++)
  5344. {
  5345. if(arrGroupDivisions[iGroupID][i][0]) format(szMessage, sizeof(szMessage), "%s%d (%s), ", szMessage, i+1, arrGroupDivisions[iGroupID][i]);
  5346. if(strlen(szMessage) > 64 || i == (MAX_GROUP_DIVS -1) && strlen(szMessage)) { SendClientMessageEx(playerid, COLOR_GRAD2, szMessage); szMessage[0] = 0; }
  5347. }
  5348. }
  5349. else if(!(1 <= iDiv <= Group_GetMaxDiv(iGroupID)+1))
  5350. {
  5351. format(szMessage, sizeof(szMessage), "Invalid division specified! Must be between 1 and %d.", Group_GetMaxDiv(iGroupID) + 1);
  5352. return SendClientMessageEx(playerid, COLOR_GREY, szMessage);
  5353. }
  5354. else if(strlen(iName) > sizeof(iName))
  5355. {
  5356. format(szMessage, sizeof(szMessage), "Division name must be less than %d characters!", sizeof(iName));
  5357. return SendClientMessageEx(playerid, COLOR_GREY, szMessage);
  5358. }
  5359. else
  5360. {
  5361. iDiv = iDiv - 1;
  5362. if(strcmp(iName, "none", true) == 0)
  5363. {
  5364. format(szMessage, sizeof(szMessage), "** %s has removed the %s division (#%i) **", GetPlayerNameEx(playerid), arrGroupDivisions[iGroupID][iDiv], iDiv + 1);
  5365. foreach(new i: Player)
  5366. {
  5367. if(PlayerInfo[i][pToggledChats][12] == 0)
  5368. {
  5369. if(PlayerInfo[i][pMember] == iGroupID) SendClientMessageEx(i, arrGroupData[iGroupID][g_hRadioColour] * 256 + 255, szMessage);
  5370. if(GetPVarInt(i, "BigEar") == 4 && GetPVarInt(i, "BigEarGroup") == iGroupID)
  5371. {
  5372. new szBigEar[128];
  5373. format(szBigEar, sizeof(szBigEar), "(BE) %s", szMessage);
  5374. SendClientMessageEx(i, arrGroupData[iGroupID][g_hRadioColour] * 256 + 255, szBigEar);
  5375. }
  5376. }
  5377. }
  5378. format(szMessage, sizeof szMessage, "%s (%d) has removed the %s division (#%i)", GetPlayerNameEx(playerid), GetPlayerSQLId(playerid), arrGroupDivisions[iGroupID][iDiv], iDiv + 1);
  5379. GroupLog(iGroupID, szMessage);
  5380. }
  5381. else
  5382. {
  5383. format(szMessage, sizeof(szMessage), "** %s has renamed division %s (#%i) to %s **", GetPlayerNameEx(playerid), arrGroupDivisions[iGroupID][iDiv], iDiv + 1, iName);
  5384. foreach(new i: Player)
  5385. {
  5386. if(PlayerInfo[i][pToggledChats][12] == 0)
  5387. {
  5388. if(PlayerInfo[i][pMember] == iGroupID) SendClientMessageEx(i, arrGroupData[iGroupID][g_hRadioColour] * 256 + 255, szMessage);
  5389. if(GetPVarInt(i, "BigEar") == 4 && GetPVarInt(i, "BigEarGroup") == iGroupID)
  5390. {
  5391. new szBigEar[128];
  5392. format(szBigEar, sizeof(szBigEar), "(BE) %s", szMessage);
  5393. SendClientMessageEx(i, arrGroupData[iGroupID][g_hRadioColour] * 256 + 255, szBigEar);
  5394. }
  5395. }
  5396. }
  5397. format(szMessage, sizeof szMessage, "%s (%d) has renamed the %s division (#%i) to %s", GetPlayerNameEx(playerid), GetPlayerSQLId(playerid), arrGroupDivisions[iGroupID][iDiv], iDiv + 1, iName);
  5398. GroupLog(iGroupID, szMessage);
  5399. }
  5400. mysql_escape_string(iName, arrGroupDivisions[iGroupID][iDiv]);
  5401. }
  5402. }
  5403. else return SendClientMessageEx(playerid, COLOR_GREY, "You're not authorized to use this command!");
  5404. return 1;
  5405. }
  5406. CMD:setdiv(playerid, params[]) {
  5407. if(0 <= PlayerInfo[playerid][pLeader] < MAX_GROUPS) {
  5408. new
  5409. iTargetID,
  5410. iDiv,
  5411. iGroupID = PlayerInfo[playerid][pLeader],
  5412. szMessage[128];
  5413. if(sscanf(params, "ui", iTargetID, iDiv)) {
  5414. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /setdiv [player] [div]");
  5415. format(szMessage, sizeof(szMessage), "%s", "0 (None), ");
  5416. for(new i; i < MAX_GROUP_DIVS; i++)
  5417. {
  5418. if(arrGroupDivisions[iGroupID][i][0]) format(szMessage, sizeof(szMessage), "%s%d (%s), ", szMessage, i+1, arrGroupDivisions[iGroupID][i]);
  5419. if(strlen(szMessage) > 64 || i == (MAX_GROUP_DIVS -1) && strlen(szMessage)) { SendClientMessageEx(playerid, COLOR_GRAD2, szMessage); szMessage[0] = 0; }
  5420. }
  5421. }
  5422. else if(!(0 <= iDiv <= Group_GetMaxDiv(iGroupID)+1)) {
  5423. format(szMessage, sizeof(szMessage), "Invalid division specified (must be between 0 and %d)", Group_GetMaxDiv(iGroupID) + 1);
  5424. SendClientMessageEx(playerid, COLOR_GREY, szMessage);
  5425. }
  5426. else if(IsPlayerConnected(iTargetID)) {
  5427. if(iGroupID == PlayerInfo[iTargetID][pMember]) {
  5428. if(iDiv - 1 == PlayerInfo[iTargetID][pDivision]) {
  5429. if (iDiv == 0) SendClientMessageEx(playerid, COLOR_GREY, "That person already has no division.");
  5430. else SendClientMessageEx(playerid, COLOR_GREY, "That person is already in that division.");
  5431. }
  5432. else if(PlayerInfo[playerid][pLeader] == iGroupID || PlayerInfo[playerid][pDivision] == PlayerInfo[iTargetID][pDivision] || PlayerInfo[playerid][pRank] >= (Group_GetMaxRank(iGroupID) - 3)) {
  5433. if(iDiv == 0)
  5434. {
  5435. format(szMessage, sizeof(szMessage), "You have been kicked out of your current division by %s.", GetPlayerNameEx(playerid));
  5436. SendClientMessageEx(iTargetID, COLOR_LIGHTBLUE, szMessage);
  5437. format(szMessage, sizeof(szMessage), "You have kicked %s from their division.", GetPlayerNameEx(iTargetID));
  5438. SendClientMessageEx(playerid, COLOR_LIGHTBLUE, szMessage);
  5439. format(szMessage, sizeof szMessage, "%s %s (%d) has kicked %s (%d) out of their division in %s (%d).", arrGroupRanks[iGroupID][PlayerInfo[playerid][pRank]], GetPlayerNameEx(playerid), GetPlayerSQLId(playerid), GetPlayerNameEx(iTargetID), GetPlayerSQLId(iTargetID), arrGroupData[iGroupID][g_szGroupName], iGroupID + 1);
  5440. GroupLog(iGroupID, szMessage);
  5441. }
  5442. else
  5443. {
  5444. format(szMessage, sizeof szMessage, "%s %s has set you to the %s division.", arrGroupRanks[iGroupID][PlayerInfo[playerid][pRank]], GetPlayerNameEx(playerid), arrGroupDivisions[iGroupID][iDiv-1]);
  5445. SendClientMessageEx(iTargetID, COLOR_LIGHTBLUE, szMessage);
  5446. format(szMessage, sizeof szMessage, "You have set %s to the %s division.", GetPlayerNameEx(iTargetID), arrGroupDivisions[iGroupID][iDiv-1]);
  5447. SendClientMessageEx(playerid, COLOR_LIGHTBLUE, szMessage);
  5448. format(szMessage, sizeof szMessage, "%s %s (%d) has set %s's (%d) division to %s in %s (%d).", arrGroupRanks[iGroupID][PlayerInfo[playerid][pRank]], GetPlayerNameEx(playerid), GetPlayerSQLId(playerid), GetPlayerNameEx(iTargetID), GetPlayerSQLId(iTargetID), arrGroupDivisions[iGroupID][iDiv-1], arrGroupData[iGroupID][g_szGroupName], iGroupID + 1);
  5449. GroupLog(iGroupID, szMessage);
  5450. }
  5451. PlayerInfo[iTargetID][pDivision] = iDiv-1;
  5452. }
  5453. else SendClientMessageEx(playerid, COLOR_GREY, "You're not authorized to make that division change.");
  5454. }
  5455. else SendClientMessageEx(playerid, COLOR_GRAD1, "That person is not in your group.");
  5456. }
  5457. else SendClientMessageEx(playerid, COLOR_GRAD1, "Invalid player specified.");
  5458. }
  5459. else
  5460. return SendClientMessageEx(playerid, COLOR_GREY, "You're not authorized to use this command!");
  5461. return 1;
  5462. }
  5463. CMD:setbadge(playerid, params[])
  5464. {
  5465. if(0 <= PlayerInfo[playerid][pLeader] < MAX_GROUPS && arrGroupData[PlayerInfo[playerid][pLeader]][g_iGroupType] != GROUP_TYPE_CRIMINAL)
  5466. {
  5467. new
  5468. iTargetID,
  5469. iBadge[9],
  5470. iGroupID = PlayerInfo[playerid][pLeader],
  5471. szMessage[128],
  5472. tmp[9];
  5473. if(sscanf(params, "us[8]", iTargetID, iBadge)) SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /setbadge [player] [number] -- Use 'none' as number to remove badge");
  5474. else if(IsPlayerConnected(iTargetID))
  5475. {
  5476. if(iGroupID == PlayerInfo[iTargetID][pMember])
  5477. {
  5478. if(strcmp(iBadge, "none", true) == 0)
  5479. {
  5480. format(szMessage, sizeof(szMessage), "Your badge has been removed by %s.", GetPlayerNameEx(playerid));
  5481. SendClientMessageEx(iTargetID, COLOR_LIGHTBLUE, szMessage);
  5482. format(szMessage, sizeof(szMessage), "You have removed %s's badge.", GetPlayerNameEx(iTargetID));
  5483. SendClientMessageEx(playerid, COLOR_LIGHTBLUE, szMessage);
  5484. format(szMessage, sizeof(szMessage), "%s (%d) has removed %s's (%d) badge.", GetPlayerNameEx(playerid), GetPlayerSQLId(playerid), GetPlayerNameEx(iTargetID), GetPlayerSQLId(iTargetID));
  5485. GroupLog(iGroupID, szMessage);
  5486. }
  5487. else
  5488. {
  5489. format(szMessage, sizeof(szMessage), "Your badge has been set to %s by %s.", iBadge, GetPlayerNameEx(playerid));
  5490. SendClientMessageEx(iTargetID, COLOR_LIGHTBLUE, szMessage);
  5491. format(szMessage, sizeof(szMessage), "You have set %s's badge to %s.", GetPlayerNameEx(iTargetID), iBadge);
  5492. SendClientMessageEx(playerid, COLOR_LIGHTBLUE, szMessage);
  5493. format(szMessage, sizeof(szMessage), "%s (%d) has set %s's (%d) badge to %s.", GetPlayerNameEx(playerid), GetPlayerSQLId(playerid), GetPlayerNameEx(iTargetID), GetPlayerSQLId(iTargetID), iBadge);
  5494. GroupLog(iGroupID, szMessage);
  5495. }
  5496. mysql_escape_string(iBadge, tmp);
  5497. strcat((PlayerInfo[iTargetID][pBadge][0] = 0, PlayerInfo[iTargetID][pBadge]), tmp, 9);
  5498. }
  5499. else SendClientMessageEx(playerid, COLOR_GRAD1, "That person is not in your group.");
  5500. }
  5501. else SendClientMessageEx(playerid, COLOR_GRAD1, "Invalid player specified.");
  5502. }
  5503. else return SendClientMessageEx(playerid, COLOR_GREY, "You're not authorized to use this command!");
  5504. return 1;
  5505. }
  5506. CMD:invite(playerid, params[]) {
  5507. if(0 <= PlayerInfo[playerid][pLeader] < MAX_GROUPS) {
  5508. new
  5509. iTargetID;
  5510. if(sscanf(params, "u", iTargetID)) {
  5511. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /invite [player]");
  5512. }
  5513. else if(IsPlayerConnected(iTargetID)) {
  5514. if (iTargetID != playerid) {
  5515. if(!(0 <= PlayerInfo[iTargetID][pLeader] < MAX_GROUPS) && !(0 <= PlayerInfo[iTargetID][pMember] < MAX_GROUPS)) {
  5516. new
  5517. szQuery[128],
  5518. iGroupID = PlayerInfo[playerid][pLeader];
  5519. mysql_format(MainPipeline, szQuery, sizeof szQuery, "SELECT `TypeBan` FROM `groupbans` WHERE `PlayerID` = %i AND (`TypeBan` = %i OR `GroupBan` = %i)", GetPlayerSQLId(iTargetID), arrGroupData[iGroupID][g_iGroupType], iGroupID);
  5520. mysql_tquery(MainPipeline, szQuery, "Group_QueryFinish", "ii", GROUP_QUERY_INVITE, playerid);
  5521. SendClientMessage(playerid, COLOR_WHITE, "Checking group ban list, please wait...");
  5522. SetPVarInt(playerid, "Group_Invited", iTargetID);
  5523. }
  5524. else SendClientMessageEx(playerid, COLOR_GREY, "The person you're trying to invite is already in another group.");
  5525. }
  5526. else SendClientMessageEx(playerid, COLOR_GREY, "You cannot use this command on yourself.");
  5527. }
  5528. else SendClientMessageEx(playerid, COLOR_GRAD1, "Invalid player specified.");
  5529. }
  5530. else SendClientMessageEx(playerid, COLOR_GRAD1, "Only group leaders may use this command.");
  5531. return 1;
  5532. }
  5533. CMD:lastdriver(playerid, params[])
  5534. {
  5535. new vehid, string[128];
  5536. if(sscanf(params, "d", vehid)) return SendClientMessageEx(playerid, COLOR_GRAD2, "USAGE: /lastdriver [vehicle id]");
  5537. if(isnull(VehInfo[vehid][vLastDriver])) format(VehInfo[vehid][vLastDriver], MAX_PLAYER_NAME, "nobody");
  5538. if(GetVehicleModel(vehid) != 0)
  5539. {
  5540. if(PlayerInfo[playerid][pAdmin] > 1)
  5541. {
  5542. format(string, sizeof(string), "Vehicle %d's last known driver was {AA3333}%s", vehid, VehInfo[vehid][vLastDriver]);
  5543. SendClientMessage(playerid, COLOR_YELLOW, string);
  5544. }
  5545. else if(PlayerInfo[playerid][pLeader] != INVALID_GROUP_ID)
  5546. {
  5547. if(DynVeh[vehid] != -1)
  5548. {
  5549. if(DynVehicleInfo[DynVeh[vehid]][gv_igID] == PlayerInfo[playerid][pLeader])
  5550. {
  5551. format(string, sizeof(string), "Vehicle %d's last known driver was {AA3333}%s", vehid, VehInfo[vehid][vLastDriver]);
  5552. SendClientMessage(playerid, COLOR_YELLOW, string);
  5553. }
  5554. }
  5555. else return SendClientMessageEx(playerid, COLOR_GRAD2, "That vehicle does not belong to your group");
  5556. }
  5557. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You're not authorized to use this command!");
  5558. }
  5559. else return SendClientMessageEx(playerid, COLOR_GRAD2, "Invalid Vehicle ID");
  5560. return 1;
  5561. }
  5562. CMD:togbr(playerid, params[])
  5563. {
  5564. if(PlayerInfo[playerid][pRank] >= arrGroupData[PlayerInfo[playerid][pMember]][g_iBugAccess]) {
  5565. if (gBug{playerid} == 1)
  5566. {
  5567. gBug{playerid} = 1;
  5568. SendClientMessageEx(playerid, COLOR_GRAD2, "Bug chat channel enabled. You will now be able to hear transmissions from all active bugs.");
  5569. PlayerInfo[playerid][pToggledChats][13] = 0;
  5570. }
  5571. else
  5572. {
  5573. gBug{playerid} = 0;
  5574. SendClientMessageEx(playerid, COLOR_GRAD2, "Bug chat channel disabled.");
  5575. PlayerInfo[playerid][pToggledChats][13] = 1;
  5576. }
  5577. }
  5578. return 1;
  5579. }
  5580. CMD:sanrank(playerid, params[])
  5581. {
  5582. new
  5583. iGroupID = PlayerInfo[playerid][pMember];
  5584. szMiscArray[0] = 0;
  5585. /*
  5586. Camera (1)
  5587. Show Host (2)
  5588. Broadcast Editor/Director(2)
  5589. Executive Commands
  5590. */
  5591. if(arrGroupData[iGroupID][g_iGroupType] != GROUP_TYPE_NEWS) return SendClientMessageEx(playerid, COLOR_GREY, "You are not authorized to use this command.");
  5592. if(PlayerInfo[playerid][pLeader] == iGroupID)
  5593. {
  5594. new iRank,
  5595. iChoice;
  5596. if(sscanf(params, "dd", iChoice, iRank)) {
  5597. format(szMiscArray, sizeof(szMiscArray), "CURRENTLY: Cameraman (Rank: %d) | Show Host (Rank: %d) | Broadcast Editor/Director (Rank: %d) | All Priviledges (Rank: %d)",
  5598. arrGroupData[iGroupID][g_iWithdrawRank][0], arrGroupData[iGroupID][g_iWithdrawRank][1], arrGroupData[iGroupID][g_iWithdrawRank][2],
  5599. arrGroupData[iGroupID][g_iWithdrawRank][3]);
  5600. SendClientMessageEx(playerid, COLOR_GREY, szMiscArray);
  5601. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /sanrank [choice] [rank]");
  5602. return SendClientMessageEx(playerid, COLOR_GREY, "CHOICES: Cameraman(0) Show Host(1) Broadcast Editor/Director(2) All(3)");
  5603. }
  5604. if(!(0 <= iChoice <= 3)) {
  5605. return SendClientMessageEx(playerid, COLOR_GREY, "Specify a valid choice!");
  5606. }
  5607. else
  5608. {
  5609. if(0 <= iRank <= MAX_GROUP_RANKS-1 || iRank == INVALID_RANK)
  5610. {
  5611. arrGroupData[iGroupID][g_iWithdrawRank][iChoice] = iRank;
  5612. format(szMiscArray, sizeof(szMiscArray), "You have adjusted the rank permission to %i.", iRank);
  5613. SendClientMessageEx(playerid, COLOR_GREY, szMiscArray);
  5614. format(szMiscArray, sizeof(szMiscArray), "%s has adjusted the rank permission for choice %d to %i.", GetPlayerNameEx(playerid), iChoice, iRank);
  5615. GroupLog(iGroupID, szMiscArray);
  5616. SaveGroup(iGroupID);
  5617. }
  5618. else SendClientMessage(playerid, COLOR_GREY, "Please specify a valid rank");
  5619. }
  5620. }
  5621. else SendClientMessage(playerid, COLOR_GREY, "You are not authorized to use this command.");
  5622. return 1;
  5623. }
  5624. CMD:adjustwithdrawrank(playerid, params[])
  5625. {
  5626. new
  5627. iGroupID = PlayerInfo[playerid][pMember];
  5628. szMiscArray[0] = 0;
  5629. /*
  5630. Money(1)
  5631. Materials(2)
  5632. Drugs(3)
  5633. Weapons(4)
  5634. Ammo(5)
  5635. */
  5636. if(arrGroupData[iGroupID][g_iGroupType] != GROUP_TYPE_CRIMINAL && arrGroupData[iGroupID][g_iCrimeType] != GROUP_CRIMINAL_TYPE_RACE) return SendClientMessageEx(playerid, COLOR_GREY, "You are not authorized to use this command.");
  5637. if(PlayerInfo[playerid][pLeader] == iGroupID)
  5638. {
  5639. new iRank,
  5640. iChoice;
  5641. if(sscanf(params, "dd", iChoice, iRank)) {
  5642. SendClientMessageEx(playerid, COLOR_WHITE, "USAGE: /adjustwithdrawrank [choice] [rank]");
  5643. SendClientMessageEx(playerid, COLOR_GREY, "Choice: Money - 0 | Materials - 1 | Drugs - 2");
  5644. format(szMiscArray, sizeof(szMiscArray), "CURRENTLY: Money (Rank: %d) | Materials (Rank: %d) | Drugs (Rank: %d)",
  5645. arrGroupData[iGroupID][g_iWithdrawRank][0], arrGroupData[iGroupID][g_iWithdrawRank][1], arrGroupData[iGroupID][g_iWithdrawRank][2]);
  5646. return SendClientMessageEx(playerid, COLOR_GREY, szMiscArray);
  5647. }
  5648. if(!(0 <= iChoice <= 2)) {
  5649. return SendClientMessageEx(playerid, COLOR_GREY, "Specify a valid choice!");
  5650. }
  5651. else
  5652. {
  5653. if(0 <= iRank <= MAX_GROUP_RANKS-1 || iRank == INVALID_RANK)
  5654. {
  5655. arrGroupData[iGroupID][g_iWithdrawRank][iChoice] = iRank;
  5656. format(szMiscArray, sizeof(szMiscArray), "You have adjusted the withdraw rank to %i.", iRank);
  5657. SendClientMessageEx(playerid, COLOR_GREY, szMiscArray);
  5658. format(szMiscArray, sizeof(szMiscArray), "%s has adjusted the withdraw rank for item %d to %i.", GetPlayerNameEx(playerid), iChoice, iRank);
  5659. GroupLog(iGroupID, szMiscArray);
  5660. }
  5661. else SendClientMessage(playerid, COLOR_GREY, "Please specify a valid rank");
  5662. }
  5663. }
  5664. else SendClientMessage(playerid, COLOR_GREY, "You are not authorized to use this command.");
  5665. return 1;
  5666. }
  5667. CMD:families(playerid, params[])
  5668. {
  5669. if(!IsACriminal(playerid) && PlayerInfo[playerid][pAdmin] < 2) return SendClientMessage(playerid, COLOR_GRAD2, "You need to be in a family / gang to use this command.");
  5670. if(isnull(params))
  5671. {
  5672. szMiscArray[0] = 0;
  5673. SendClientMessage(playerid, COLOR_GRAD2, "USAGE: /families [id]");
  5674. for(new i = 0; i < MAX_GROUPS; i++)
  5675. {
  5676. if(arrGroupData[i][g_iGroupType] == GROUP_TYPE_CRIMINAL && strlen(arrGroupData[i][g_szGroupName]) > 0)
  5677. {
  5678. new iMemberCount = 0;
  5679. foreach(new x: Player)
  5680. {
  5681. if(PlayerInfo[x][pMember] == i) iMemberCount++;
  5682. }
  5683. format(szMiscArray, sizeof szMiscArray, "** %s (%d) | Total Members: %d | Members Online: %d", arrGroupData[i][g_szGroupName], i, arrGroupData[i][g_iMemberCount], iMemberCount);
  5684. SendClientMessage(playerid, COLOR_GRAD1, szMiscArray);
  5685. }
  5686. }
  5687. }
  5688. else
  5689. {
  5690. new grp = strval(params);
  5691. if(grp < 0 || grp > MAX_GROUPS || strlen(arrGroupData[grp][g_szGroupName]) == 0) return SendClientMessage(playerid, COLOR_GRAD2, "Invalid group ID specified.");
  5692. if(arrGroupData[grp][g_iGroupType] != GROUP_TYPE_CRIMINAL) return SendClientMessage(playerid, COLOR_GRAD2, "That group is not a family / gang.");
  5693. new iCount = 0;
  5694. foreach(new i: Player)
  5695. {
  5696. if(PlayerInfo[i][pMember] == grp)
  5697. {
  5698. format(szMiscArray, sizeof szMiscArray, "** %s (ID: %d) - %s (%d)", GetPlayerNameEx(i), i, arrGroupRanks[grp][PlayerInfo[i][pRank]], PlayerInfo[i][pRank]);
  5699. SendClientMessage(playerid, COLOR_GRAD1, szMiscArray);
  5700. iCount++;
  5701. }
  5702. }
  5703. if(iCount == 0) SendClientMessage(playerid, COLOR_GRAD3, "There are no players online in this gang.");
  5704. }
  5705. return 1;
  5706. }
  5707. //CMD:families(playerid, params[]) return cmd_orgs(playerid, params);
  5708. CMD:orgs(playerid, params[])
  5709. {
  5710. szMiscArray[0] = 0;
  5711. for(new i = 0; i < MAX_GROUPS; i++)
  5712. {
  5713. if(arrGroupData[i][g_iGroupType] == GROUP_TYPE_CRIMINAL && strlen(arrGroupData[i][g_szGroupName]) > 0)
  5714. {
  5715. new iMemberCount = 0;
  5716. foreach(new x: Player)
  5717. {
  5718. if(PlayerInfo[x][pMember] == i) iMemberCount++;
  5719. }
  5720. format(szMiscArray, sizeof(szMiscArray), "** %s | Total Members: %d | Members Online: %i", arrGroupData[i][g_szGroupName], arrGroupData[i][g_iMemberCount], iMemberCount);
  5721. SendClientMessageEx(playerid, COLOR_WHITE, szMiscArray);
  5722. }
  5723. }
  5724. return 1;
  5725. }
  5726. CMD:clothes(playerid, params[])
  5727. {
  5728. new biz = InBusiness(playerid);
  5729. if(!IsACriminal(playerid)) return SendClientMessageEx(playerid, COLOR_GRAD1, "You're not in a Family/Gang!");
  5730. if (biz != INVALID_BUSINESS_ID && Businesses[biz][bType] == BUSINESS_TYPE_CLOTHING)
  5731. {
  5732. new fSkin[MAX_GROUP_RANKS];
  5733. for(new i = 0; i < MAX_GROUP_RANKS; i++)
  5734. {
  5735. fSkin[i] = arrGroupData[PlayerInfo[playerid][pMember]][g_iClothes][i];
  5736. }
  5737. ShowModelSelectionMenuEx(playerid, fSkin, MAX_GROUP_RANKS, "Change your clothes.", DYNAMIC_FAMILY_CLOTHES, 0.0, 0.0, -55.0);
  5738. }
  5739. else return SendClientMessageEx(playerid, COLOR_GRAD2, "You're not in a clothing shop.");
  5740. return true;
  5741. }
  5742. stock ShowPlayerCrimeDialog(playerid)
  5743. {
  5744. new szCrime[1200];
  5745. format(szCrime, sizeof(szCrime), "----Misdemeanors----\n");
  5746. for(new i = 0; i < sizeof(SuspectCrimes); i++)
  5747. {
  5748. if(SuspectCrimeInfo[i][0] == 0)
  5749. {
  5750. strcat(szCrime, "{FFFF00}");
  5751. strcat(szCrime, SuspectCrimes[i]);
  5752. strcat(szCrime, "\n");
  5753. }
  5754. }
  5755. strcat(szCrime, "----Felonies----\n");
  5756. for(new i = 0; i < sizeof(SuspectCrimes); i++)
  5757. {
  5758. if(SuspectCrimeInfo[i][0] == 1)
  5759. {
  5760. strcat(szCrime, "{AA3333}");
  5761. strcat(szCrime, SuspectCrimes[i]);
  5762. strcat(szCrime, "\n");
  5763. }
  5764. }
  5765. //strcat(szCrime, "Other (Not Listed)");
  5766. return ShowPlayerDialogEx(playerid, DIALOG_SUSPECTMENU, DIALOG_STYLE_LIST, "Select a committed crime", szCrime, "Select", "Exit");
  5767. }
  5768. CMD:lockerbalance(playerid, params[])
  5769. {
  5770. if(0 <= PlayerInfo[playerid][pMember] < MAX_GROUPS && (arrGroupData[PlayerInfo[playerid][pMember]][g_iGroupType] == GROUP_TYPE_CRIMINAL || arrGroupData[PlayerInfo[playerid][pMember]][g_iCrimeType] == GROUP_CRIMINAL_TYPE_RACE))
  5771. {
  5772. new weps, GroupID = PlayerInfo[playerid][pMember];
  5773. for(new s = 0; s != 50; s++)
  5774. {
  5775. if(arrGroupData[GroupID][g_iWeapons][s] != 0) weps++;
  5776. }
  5777. szMiscArray[0] = 0;
  5778. format(szMiscArray, sizeof(szMiscArray), "Locker: Weapons: %d/50 | Cash: $%s | Pot: %d | Crack: %d | Meth: %d | Ecstasy: %d | Heroin: %d | Syringes: %d | Materials: %d ", weps, number_format(arrGroupData[GroupID][g_iBudget]), arrGroupData[GroupID][g_iPot], arrGroupData[GroupID][g_iCrack],
  5779. arrGroupData[GroupID][g_iMeth], arrGroupData[GroupID][g_iEcstasy], arrGroupData[GroupID][g_iHeroin], arrGroupData[GroupID][g_iSyringes], arrGroupData[GroupID][g_iMaterials]);
  5780. SendClientMessageEx(playerid, COLOR_WHITE, szMiscArray);
  5781. }
  5782. else SendClientMessageEx(playerid, COLOR_GRAD1, "You're not in a criminal group.");
  5783. return 1;
  5784. }
  5785. CMD:turnout(playerid, params[])
  5786. {
  5787. if(!IsACop(playerid) && !IsAMedic(playerid)) return SendClientMessageEx(playerid, COLOR_GRAD2, "You're not a Law Enforcement Officer/Medic.");
  5788. new closestCar = GetClosestCar(playerid, .fRange = 8.0);
  5789. if(closestCar == INVALID_VEHICLE_ID) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not near any vehicle!");
  5790. if(!IsACopCar(closestCar) && !IsAnAmbulance(closestCar)) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not near a group vehicle!");
  5791. return ShowPlayerDialogEx(playerid, DIALOG_GROUP_TURNOUT, DIALOG_STYLE_LIST, "Turnout", IsFirstAid(playerid) ? ("SWAT\nLS Fire\nSF Fire\nLV Fire\nOriginal Clothes"):("SWAT\nOriginal Clothes"), "Select", "Cancel");
  5792. }
  5793. MemberCount(groupID)
  5794. {
  5795. szMiscArray[0] = 0;
  5796. mysql_format(MainPipeline, szMiscArray, sizeof(szMiscArray), "SELECT NULL FROM `accounts` WHERE `Member` = %d", groupID);
  5797. mysql_tquery(MainPipeline, szMiscArray, "OnMemberCount", "i", groupID);
  5798. }
  5799. forward OnMemberCount(groupID);
  5800. public OnMemberCount(groupID)
  5801. {
  5802. new rows;
  5803. cache_get_row_count(rows);
  5804. arrGroupData[groupID][g_iMemberCount] = rows;
  5805. }
  5806. /*
  5807. ShowGroupWeapons(playerid, iGroupID) {
  5808. format(szMiscArray, sizeof(szMiscArray), "SELECT * FROM `gWeaponsNew` WHERE `Group_ID` = '%d'", iGroupID+1);
  5809. mysql_tquery(MainPipeline, szMiscArray, true, "OnShowGroupWeapons", "ii", playerid, iGroupID+1);
  5810. return 1;
  5811. }*/
  5812. forward OnShowGroupWeapons(playerid, iGroupID);
  5813. public OnShowGroupWeapons(playerid, iGroupID) {
  5814. szMiscArray[0] = 0;
  5815. new
  5816. tempWep[3],
  5817. iCount;
  5818. for(new i = 1; i <= 18; i++) {
  5819. valstr(tempWep, i);
  5820. cache_get_value_name_int(0, tempWep, iCount);
  5821. format(szMiscArray, sizeof(szMiscArray), "%s\n[%d]%s (%d)", szMiscArray, i, Weapon_ReturnName(i), iCount);
  5822. }
  5823. for(new i = 22; i <= 46; i++) {
  5824. valstr(tempWep, i);
  5825. cache_get_value_name_int(0, tempWep, iCount);
  5826. format(szMiscArray, sizeof(szMiscArray), "%s\n[%d]%s (%d)",szMiscArray, i, Weapon_ReturnName(i), iCount);
  5827. }
  5828. strcat(szMiscArray, "\nDeposit Weapon");
  5829. ShowPlayerDialogEx(playerid, DIALOG_GROUP_WEAPONSAFE, DIALOG_STYLE_LIST, "Gang Weapon Safe", szMiscArray, "Select", "Cancel");
  5830. return 1;
  5831. }
  5832. WithdrawGroupSafeWeapon(playerid, iGroupID, iWeaponID, iAmount = 1) {
  5833. szMiscArray[0] = 0;
  5834. if(PlayerInfo[playerid][pRank] < arrGroupData[iGroupID][g_iWithdrawRank][3] && playerid != INVALID_PLAYER_ID) return SendClientMessageEx(playerid, COLOR_WHITE, "You are not authorized to withdraw weapons from the locker!");
  5835. mysql_format(MainPipeline, szMiscArray, sizeof(szMiscArray), "UPDATE `gWeaponsNew` SET `%d` = `%d` - %d WHERE `id` = '%d'", iWeaponID, iWeaponID, iAmount, iGroupID+1);
  5836. //format(szMiscArray, sizeof(szMiscArray), "DELETE FROM `gWeapons` WHERE `Group_ID` = '%d' AND `Weapon_ID` = '%d' LIMIT 1", iGroupID, iWeaponID);
  5837. mysql_tquery(MainPipeline, szMiscArray, "OnWithdrawGroupWeapons", "iiii", playerid, iGroupID+1, iWeaponID, iAmount);
  5838. return 1;
  5839. }
  5840. forward OnWithdrawGroupWeapons(playerid, iGroupID, iWeaponID, iAmount);
  5841. public OnWithdrawGroupWeapons(playerid, iGroupID, iWeaponID, iAmount) {
  5842. szMiscArray[0] = 0;
  5843. if(playerid != INVALID_PLAYER_ID) {
  5844. GivePlayerValidWeapon(playerid, iWeaponID);
  5845. format(szMiscArray, sizeof(szMiscArray), "%s has withdrawn a %s from the locker.", GetPlayerNameEx(playerid), Weapon_ReturnName(iWeaponID));
  5846. GroupLog(iGroupID-1, szMiscArray);
  5847. if(iWeaponID != 22 && iWeaponID != 19){
  5848. format(szMiscArray, sizeof(szMiscArray), "You have withdrawn a %s from the locker.", Weapon_ReturnName(iWeaponID));
  5849. }
  5850. else {
  5851. format(szMiscArray, sizeof(szMiscArray), "You have withdrawn a Colt from the locker.");
  5852. }
  5853. SendClientMessageEx(playerid, COLOR_WHITE, szMiscArray);
  5854. }
  5855. else {
  5856. format(szMiscArray, sizeof(szMiscArray), "A %s has been transfered from the locker (x%d).", Weapon_ReturnName(iWeaponID), iAmount);
  5857. GroupLog(iGroupID-1, szMiscArray);
  5858. }
  5859. return 1;
  5860. }
  5861. AddGroupSafeWeapon(playerid, iGroupID, iWeaponID, iAmount = 1) {
  5862. szMiscArray[0] = 0;
  5863. if(playerid != INVALID_PLAYER_ID && PlayerInfo[playerid][pGuns][GetWeaponSlot(iWeaponID)] == 0) return 1;
  5864. mysql_format(MainPipeline, szMiscArray, sizeof(szMiscArray), "UPDATE `gWeaponsNew` SET `%d` = `%d` + %d WHERE `id` = '%d'", iWeaponID, iWeaponID, iAmount, iGroupID+1);
  5865. //mysql_format(MainPipeline, szMiscArray, sizeof(szMiscArray), "INSERT INTO `gWeapons` (`Group_ID`, `Weapon_ID`) VALUES ('%d', '%d') ", iGroupID, iWeaponID);
  5866. mysql_tquery(MainPipeline, szMiscArray, "OnAddGroupSafeWeapon", "iiii", playerid, iGroupID+1, iWeaponID, iAmount);
  5867. return 1;
  5868. }
  5869. forward OnAddGroupSafeWeapon(playerid, iGroupID, iWeaponID, iAmount);
  5870. public OnAddGroupSafeWeapon(playerid, iGroupID, iWeaponID, iAmount) {
  5871. szMiscArray[0] = 0;
  5872. if(playerid != INVALID_PLAYER_ID) {
  5873. PlayerInfo[playerid][pGuns][GetWeaponSlot(iWeaponID)] = 0;
  5874. SetPlayerWeaponsEx(playerid);
  5875. format(szMiscArray, sizeof(szMiscArray), "%s has deposited a %s into the locker.", GetPlayerNameEx(playerid), Weapon_ReturnName(iWeaponID));
  5876. GroupLog(iGroupID-1, szMiscArray);
  5877. format(szMiscArray, sizeof(szMiscArray), "You have deposited a %s into the locker.", Weapon_ReturnName(iWeaponID));
  5878. SendClientMessageEx(playerid, COLOR_WHITE, szMiscArray);
  5879. }
  5880. else {
  5881. format(szMiscArray, sizeof(szMiscArray), "A %s has been deposited into the locker (x%d).", Weapon_ReturnName(iWeaponID), iAmount);
  5882. GroupLog(iGroupID-1, szMiscArray);
  5883. }
  5884. return 1;
  5885. }
  5886. GetSafeTakePerm(iOpt) {
  5887. new iSlot;
  5888. switch(iOpt) {
  5889. case 0: iSlot = 0;
  5890. case 1: iSlot = 1;
  5891. case 2 .. 3: iSlot = 2;
  5892. case 4: iSlot = 3;
  5893. case 5: iSlot = 4;
  5894. }
  5895. return iSlot;
  5896. }
  5897. /*
  5898. Money(1)
  5899. Materials(2)
  5900. Drugs(3)
  5901. Weapons(4)
  5902. Ammo(5)
  5903. */
  5904. forward ValidGroup(groupid);
  5905. public ValidGroup(groupid) {
  5906. if((0 <= groupid < MAX_GROUPS)) return 1;
  5907. else return 0;
  5908. }
  5909. forward IsGroupLeader(playerid);
  5910. public IsGroupLeader(playerid) {
  5911. if(ValidGroup(PlayerInfo[playerid][pMember]) && PlayerInfo[playerid][pMember] == PlayerInfo[playerid][pLeader]) return 1;
  5912. else return 0;
  5913. }
  5914. // Remove Money: SetGroupBudget(groupid, -amount).
  5915. forward SetGroupBudget(groupid, amount);
  5916. public SetGroupBudget(groupid, amount) {
  5917. if(ValidGroup(groupid)) {
  5918. arrGroupData[groupid][g_iBudget] += floatround(amount);
  5919. }
  5920. return 1;
  5921. }
  5922. forward GetGroupBudget(groupid);
  5923. public GetGroupBudget(groupid) {
  5924. if(ValidGroup(groupid)) {
  5925. return arrGroupData[groupid][g_iBudget];
  5926. }
  5927. return 0;
  5928. }