Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Wklejka 133399801116482 dodana przez Jak się nazwać, 09.04.2012 20:00
Typ:


Jak się nazwać
133399801116482
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
461.
462.
463.
464.
465.
466.
467.
468.
469.
470.
471.
472.
473.
474.
475.
476.
477.
478.
479.
480.
481.
482.
483.
484.
485.
486.
487.
488.
489.
490.
491.
492.
493.
494.
495.
496.
497.
498.
499.
500.
501.
502.
503.
504.
505.
506.
507.
508.
509.
510.
511.
512.
513.
514.
515.
516.
517.
518.
519.
520.
521.
522.
523.
524.
525.
526.
527.
528.
529.
530.
531.
532.
533.
534.
535.
536.
537.
538.
539.
540.
541.
542.
543.
544.
545.
546.
547.
548.
549.
550.
551.
552.
553.
554.
555.
556.
557.
558.
559.
560.
561.
562.
563.
564.
565.
566.
567.
568.
569.
570.
571.
572.
573.
574.
575.
576.
577.
578.
579.
580.
581.
582.
583.
584.
585.
586.
587.
588.
589.
590.
591.
592.
593.
594.
595.
596.
597.
598.
599.
600.
601.
602.
603.
604.
605.
606.
607.
608.
609.
610.
611.
612.
613.
614.
615.
616.
617.
618.
619.
620.
621.
622.
623.
624.
625.
626.
627.
628.
629.
630.
631.
632.
633.
634.
635.
636.
637.
638.
639.
640.
641.
642.
643.
644.
645.
646.
647.
648.
649.
650.
651.
652.
653.
654.
655.
656.
657.
658.
659.
660.
661.
662.
663.
664.
665.
666.
667.
668.
669.
670.
671.
672.
673.
674.
675.
676.
677.
678.
679.
680.
681.
682.
683.
684.
685.
686.
687.
688.
689.
690.
691.
692.
693.
694.
695.
696.
697.
698.
699.
700.
701.
702.
703.
704.
705.
706.
707.
708.
709.
710.
711.
712.
713.
714.
715.
716.
717.
718.
719.
720.
721.
722.
723.
724.
725.
726.
727.
728.
729.
730.
731.
732.
733.
734.
735.
736.
737.
738.
739.
740.
741.
742.
743.
744.
745.
746.
747.
748.
749.
750.
751.
752.
753.
754.
755.
756.
757.
758.
759.
760.
761.
762.
763.
764.
765.
766.
767.
768.
769.
770.
771.
772.
773.
774.
775.
776.
777.
778.
779.
780.
781.
782.
783.
784.
785.
786.
787.
788.
789.
790.
791.
792.
793.
794.
795.
796.
797.
798.
799.
800.
801.
802.
803.
804.
805.
806.
807.
808.
809.
810.
811.
812.
813.
814.
815.
816.
817.
818.
819.
820.
821.
822.
823.
824.
825.
826.
827.
828.
829.
830.
831.
832.
833.
834.
835.
836.
837.
838.
839.
840.
841.
842.
843.
844.
845.
846.
847.
848.
849.
850.
851.
852.
853.
854.
855.
856.
857.
858.
859.
860.
861.
862.
863.
864.
865.
866.
867.
868.
869.
870.
871.
872.
873.
874.
875.
876.
877.
878.
879.
880.
881.
882.
883.
884.
885.
886.
887.
888.
889.
890.
891.
892.
893.
894.
895.
896.
897.
898.
899.
900.
901.
902.
903.
904.
905.
906.
907.
908.
909.
910.
911.
912.
913.
914.
915.
916.
917.
918.
919.
920.
921.
922.
923.
924.
925.
926.
927.
928.
929.
930.
931.
932.
933.
934.
935.
936.
937.
938.
939.
940.
941.
942.
943.
944.
945.
946.
947.
948.
949.
950.
951.
952.
953.
954.
955.
956.
957.
958.
959.
960.
961.
962.
963.
964.
965.
966.
967.
968.
969.
970.
971.
972.
973.
974.
975.
976.
977.
978.
979.
980.
981.
982.
983.
984.
985.
986.
987.
988.
989.
990.
991.
992.
993.
994.
995.
996.
997.
998.
999.
1000.
1001.
1002.
1003.
1004.
1005.
1006.
1007.
1008.
1009.
1010.
1011.
1012.
1013.
1014.
1015.
1016.
1017.
1018.
1019.
1020.
1021.
1022.
1023.
1024.
1025.
1026.
1027.
1028.
1029.
1030.
1031.
1032.
1033.
1034.
1035.
1036.
1037.
1038.
1039.
1040.
1041.
1042.
1043.
1044.
1045.
1046.
1047.
1048.
1049.
1050.
1051.
1052.
1053.
1054.
1055.
1056.
1057.
1058.
1059.
1060.
1061.
1062.
1063.
1064.
1065.
1066.
1067.
1068.
1069.
1070.
1071.
1072.
1073.
1074.
1075.
1076.
1077.
1078.
1079.
1080.
1081.
1082.
1083.
1084.
1085.
1086.
1087.
1088.
1089.
1090.
1091.
1092.
1093.
1094.
1095.
1096.
1097.
1098.
1099.
1100.
1101.
1102.
1103.
1104.
1105.
1106.
1107.
1108.
1109.
1110.
1111.
1112.
1113.
1114.
1115.
1116.
1117.
1118.
1119.
1120.
1121.
1122.
1123.
1124.
1125.
1126.
1127.
1128.
1129.
1130.
1131.
1132.
1133.
1134.
1135.
1136.
1137.
1138.
1139.
1140.
1141.
1142.
1143.
1144.
1145.
1146.
1147.
1148.
1149.
1150.
1151.
1152.
1153.
1154.
1155.
1156.
1157.
1158.
1159.
1160.
1161.
1162.
1163.
1164.
1165.
1166.
1167.
1168.
1169.
1170.
1171.
1172.
1173.
1174.
1175.
1176.
1177.
1178.
1179.
1180.
1181.
1182.
1183.
1184.
1185.
1186.
1187.
1188.
1189.
1190.
1191.
1192.
1193.
1194.
1195.
1196.
1197.
1198.
1199.
1200.
1201.
1202.
1203.
1204.
1205.
1206.
1207.
1208.
1209.
1210.
1211.
1212.
1213.
1214.
1215.
1216.
1217.
1218.
1219.
1220.
1221.
1222.
1223.
1224.
1225.
1226.
1227.
1228.
1229.
1230.
1231.
1232.
1233.
1234.
1235.
1236.
1237.
1238.
1239.
1240.
1241.
1242.
1243.
1244.
1245.
1246.
1247.
1248.
1249.
1250.
1251.
1252.
1253.
1254.
1255.
1256.
1257.
1258.
1259.
1260.
1261.
1262.
1263.
1264.
1265.
1266.
1267.
1268.
1269.
1270.
1271.
1272.
1273.
1274.
1275.
1276.
1277.
1278.
1279.
1280.
1281.
1282.
1283.
1284.
1285.
1286.
1287.
1288.
1289.
1290.
1291.
1292.
1293.
1294.
1295.
1296.
1297.
1298.
1299.
1300.
1301.
1302.
1303.
1304.
1305.
1306.
1307.
1308.
1309.
1310.
1311.
1312.
1313.
1314.
1315.
1316.
1317.
1318.
1319.
1320.
1321.
1322.
1323.
1324.
1325.
1326.
1327.
1328.
1329.
1330.
1331.
1332.
1333.
1334.
1335.
1336.
1337.
1338.
1339.
1340.
1341.
1342.
1343.
1344.
1345.
1346.
1347.
1348.
1349.
1350.
1351.
1352.
1353.
1354.
1355.
1356.
1357.
1358.
1359.
1360.
1361.
1362.
1363.
1364.
1365.
1366.
1367.
1368.
1369.
1370.
1371.
1372.
1373.
1374.
1375.
1376.
1377.
1378.
1379.
1380.
1381.
1382.
1383.
1384.
1385.
1386.
1387.
1388.
1389.
1390.
1391.
1392.
1393.
1394.
1395.
1396.
1397.
1398.
1399.
1400.
1401.
1402.
1403.
1404.
1405.
1406.
1407.
1408.
1409.
1410.
1411.
1412.
1413.
1414.
1415.
1416.
1417.
1418.
1419.
1420.
1421.
1422.
1423.
1424.
1425.
1426.
1427.
1428.
1429.
1430.
1431.
1432.
1433.
1434.
1435.
1436.
1437.
1438.
1439.
1440.
1441.
1442.
1443.
1444.
1445.
1446.
1447.
1448.
1449.
1450.
1451.
1452.
1453.
1454.
1455.
1456.
1457.
1458.
1459.
1460.
1461.
1462.
1463.
1464.
1465.
1466.
1467.
1468.
1469.
1470.
1471.
1472.
1473.
1474.
1475.
1476.
1477.
1478.
1479.
1480.
1481.
1482.
1483.
1484.
1485.
1486.
1487.
1488.
1489.
1490.
1491.
1492.
1493.
1494.
1495.
1496.
1497.
1498.
1499.
1500.
1501.
1502.
1503.
1504.
1505.
1506.
1507.
 ///////////////////////////////////////////
 //  Pokemon skills that have to do with  //
 //    being damaged or giving damage     //
 ///////////////////////////////////////////
 #if MOD==CS || MOD==NS
    public player_damage(id)
    {
 
        if(!is_user_connected(id)) return
        new aid, weapon;
        aid = get_user_attacker(id, weapon);
        pokemon_damage( aid, id, read_data(2), weapon );
    }
 #endif
 #if MOD==DOD
    public client_damage(aid, id, damage, weapon, body, TA)
        pokemon_damage( aid, id, damage, weapon );
 #endif
 public pokemon_damage( aid, id, damage, weapon )
 {
    if( PMon() )
    {
        if(PM_disabled == PM_XP)
            return
 
        if(Pokemod_Connected(aid)){
            new aname[32]
            get_user_name(aid, aname, 31)
            debugMessage(id,5,"Player", "took %d damage from %s<%s>",damage,aname,PokeToName(Pokemon[aid]))
        }
        else{
            debugMessage(id,5,"Player", "took %d damage",damage)
            aid = 0
        }
 
        PlayerDamageInfo[id][PD_ATTACKER] = aid;
        PlayerDamageInfo[id][PD_DAMAGE] = damage;
        PlayerDamageInfo[id][PD_WEAPON] = weapon;
 
        #if DAMAGE_AWAKEN==1
        //wake them up if they were sleeping
        if(g_Status[id][STATUS_ASLEEP])
            unsleep(id)
        #endif
 
        if( Pokemod_Alive(id) ){
            new holder
            for(new i=0; i < ItemsCreated; i++)
                if( ItemInfo[i] & II_ARMOR && HasPokeItem(id, i) )
                    holder += ItemArmor[i]*PlayersItem[id][i]
            Pokemod_Repair(id, holder)
 
            #if AUTO_ITEMS > 0
                AutoItems(id)
            #endif
        }
 
        if( aid != id ){
            skills_handler(aid, SI_ATTACK);
            skills_handler(id, SI_DAMAGED);
        }
 
        if( Pokemod_Alive(id) && aid ){ //need to keep making sure theyre alive incase they died by a pokeskill
            for(new i=0; i < ItemsCreated; i++)
                if( ItemInfo[i] & II_DAMAGE && HasPokeItem(aid, i) )
                    pokedamage(id, aid, (PlayersItem[aid][i]*ItemDamage[i]), ItemName[i], TYPE_NONE, _, _, _, false)
        }
 
        //Clear the players damage information
        PlayerDamageInfo[id][PD_ATTACKER] = PlayerDamageInfo[id][PD_DAMAGE] = PlayerDamageInfo[id][PD_WEAPON] = 0;
    }
 }
 
 //////////////////////
 //  Every ResetHUD  //
 //////////////////////
 public pokemon_spawn(id)
 {
    //things that we need to do immediately, and doesnt matter if we do it twice
    get_user_origin(id, aim[id]);
    pev(id, pev_origin, confuse[id]);
    Pokemod_Team(id, true);
 
    //Stop if PokeMod is not on
    if( !PMon() ) return PLUGIN_CONTINUE;
 
    //lets only do this once, incase they were respawned
    if( !task_exists(id+SPAWN_TASK) ) set_task(1.0, "spawn_stuff", id+SPAWN_TASK);
 
    return PLUGIN_CONTINUE;
 }
 public spawn_stuff(id)
 {
    id -= SPAWN_TASK;
 
    //Stop if its not a valid user
    if( !ValidPlayer(id) || !Pokemod_Alive(id, true) )
        return PLUGIN_CONTINUE;
 
    //Stop if they are not on a normal team
    if( 1 > Pokemod_Team(id) > 2 ) return PLUGIN_CONTINUE;
 
    SetAction( id );
 
    #if CHANGE_POKES != 0
    ChangedPoke[id] = CHANGE_POKES;
    #endif
 
    if(g_isWild[id]==-1)
        g_isWild[id] = 0;
 
    new i;
    debugMessage(id,3,"Player", "spawned with %s", PokeToName(Pokemon[id]));
 
    if( !Pokemod_Connected(id) )
        debugMessage(id,2,"Player", "Data Load%s", LoadXP(id)?"ed Successfully":" Failed" );
 
    #if ALLOW_WILD==1
    //give them a new pokemon if theyre being wild
    if(g_isWild[id]>0 && g_Died[id])
        AssignWild(id);
    #endif
 
    //Auto Things for bots
    if(is_user_bot(id))
        BotCenter(id);
 
    RefreshPoke(id);
 
    //let them select a starting pokemon
    if(!PlayersPoke[id][0]                    //if they dont have a pokemon out
    && !PlayersPoke[id][MAX_ACTIVE_POKES]    //if they dont have a pokemon in pc
    && Pokemod_Connected(id))                        //and they have their xp loaded
        StartMenu(id);
 
    #if MOD==CS
        new current = cs_get_user_money(id);
 
        if(current==16000 && money[id]>16000)
            Pokemod_Pay(id, money[id]-current);
        else
            money[id] = current;
    #endif
 
    //Do other stuff such as setting hp and removing pokemon statuses
 
    CheckMaxHP(id);
    CheckMaxArmor(id);
    if( Health(id) < abs( PlayerStat[id][STAT_MAXHP] ) )
        set_user_health(id, abs( PlayerStat[id][STAT_MAXHP] ) );
 
    for( i=0; i < ItemsCreated; i++)
        if( ItemInfo[i] & II_ARMOR && HasPokeItem(id, i) )
            Pokemod_Repair(id, ItemArmor[i]*PlayersItem[id][i]);
 
    // set it to 0.0 so some skills reset (otherwise they think he has a wait time and are not activated)
    set_bind(id);
    ResetSkills(id, true);
 
    poke_UnStuck(id, false);
 
    if(g_Died[id])
        ResetStatus(id, 1);    //for some reason people get stuck occasionally, this fixes the bug
    else
        ResetStatus(id);
 
    skills_handler(id, SI_SPAWN);
 
    set_bind(id, SPAWN_DELAY);
 
    SetSpeed(id);
 
    g_Died[id] = false;
 
    return PLUGIN_CONTINUE
 }
 
 /////////////////////////
 //  When someone dies  //
 /////////////////////////
 public pokemon_death()
 {
    if(!PMon()) return PLUGIN_CONTINUE
 
    new attacker = read_data(1);
    new id = read_data(2);
    new bool:caught = false;
 
    PlayerInfo[id][PL_ALIVE] = 0;
    debugMessage(id,3,"Player", "was killed");
 
    new pname[NAME_LENGTH];
    PokeToName(Pokemon[id], pname, NAME_LENGTH);
 
    if( Pokemod_Connected(attacker) ){
 
        KillXP(attacker, id);
 
        #if MOD!=CS
            if( Pokemod_FF(id, attacker) ) Pay(attacker, -300);
            else Pay(attacker, 300);
        #endif
 
        if( ValidSlot( Slot(attacker) ) && !Pokemod_FF(id, attacker) ){
 
            if( CatchChance( attacker, Pokemon[id], PlayersLevel(id, PlayersActive[id]) ) ){
                new name[32];
                get_user_name(attacker, name, 31);
 
                #if POKEMON_CATCH_XP==0
                    AddPoke(attacker, Pokemon[id], 1);
                #else
                    AddPoke(attacker, Pokemon[id], PlayersXP[id][PlayersActive[id]]);
                #endif
 
                if( g_isWild[id] > 0 )
                    poke_printlang(LANG_PLAYER,"POKEMOD_CAUGHTWILD", name, PlayersLevel(attacker, HasPokemon(attacker, Pokemon[id])), pname);
                else
                    poke_printlang(LANG_PLAYER,"POKEMOD_CAUGHT", name, PlayersLevel(attacker, HasPokemon(attacker, Pokemon[id])), pname);
 
                #if CATCH_TELEPORT==2
                    EscapeRope(attacker, 0);
                    poke_printlang(attacker,"POKEMOD_CATCHTELE", pname);
                #endif
 
                #if POKE_POPULATION==0
                    if(g_isWild[id]<1)
                    {
                        ReleasePoke(id, Pokemon[id], false);
                        poke_printlang(id,"POKEMOD_CATCHTAKE", name, pname);
                    }
                #endif
 
                caught = true;
            }
        }
    }
    if(!caught && g_isWild[id]>0){
        poke_printlang(LANG_PLAYER,"POKEMOD_WILDDIE", pname);
    }
 
    // set their bind to nothing so skills reset/activate
    set_bind(id);
 
    skills_handler(id, SI_DEAD);
 
    ResetSkills(id, true);
    ResetStatus(id, 1);
 
    set_bind(id, WAIT_TIME);
 
     PlayerStat[id][STAT_MAXHP] = 100;
    g_Died[id] = true;
 
    new i;
    for( i=0; i<=MAX_PLAYERS; i++ )
        if(PlayerEnt[i] == id)
            PlayerEnt[i] = 0;
 
    if( PM_disabled != PM_ON )
        return PLUGIN_CONTINUE;
 
    if( !PokeItem(id) ){
        #if RANDOM_ITEMS == 0
            return PLUGIN_CONTINUE;
        #else
 
            if( random_num(0,100) < abs(RANDOM_CHANCE) ){
                new rand_item = random(ItemsCreated);
 
                #if RANDOM_CHANCE < 0 && RANDOM_ITEMS == 1
                while( ItemInfo[rand_item]&II_SPECIAL )
                    rand_item = random(ItemsCreated);
                #endif
 
                #if RANDOM_ITEMS == 2
                    new price = abs( CostOfItem(rand_item) );
                    if( !price )
                        price = MAX_MONEY;
 
                    #if RANDOM_CHANCE < 0
                        while( price > random_num(0, MAX_MONEY) || ItemInfo[rand_item]&II_SPECIAL ){
                            rand_item = random(ItemsCreated);
                            price = abs( CostOfItem(rand_item) );
                            if( !price )
                                price = MAX_MONEY;
                        }
                    #else
                        while( price > random_num(0, MAX_MONEY) ){
                            rand_item = random(ItemsCreated);
                            price = abs( CostOfItem(rand_item) );
                            if( !price )
                                price = MAX_MONEY;
                        }
                    #endif
                #endif
 
                PlayersItem[id][rand_item]++;
            }
            else
                return PLUGIN_CONTINUE;
        #endif
    }
 
    //Makes pokeball for item drops
 
    new ilen, targname[255], bool:make_drop = false;
    for(i = 0; i < ItemsCreated; i++){
        if( HasPokeItem(id, i) && !(ItemInfo[i]&II_NODROP) ){
            ilen += formatex(targname[ilen], (255-ilen), "%d %d ", i, PlayersItem[id][i]);
            PlayersItem[id][i] = 0;
 
            if( ItemEventForward > -1 )
            {
                new functionReturn
                ExecuteForward(ItemEventForward, functionReturn, id, IE_DROP, i)
 
                // Forward will return the highest value, don't return 1 or 2 in function cause of return handled or handled_main
                // and 0 is used by continue and invalid return.
                if(functionReturn==PLUGIN_HANDLED)    //if something was handled, stop
                {
                    return PLUGIN_HANDLED;
                }
            }
 
            make_drop = true;
        }
    }
 
    if( !make_drop )
        return PLUGIN_CONTINUE;
 
    new Float:temporigin[3], Float:angle[3];
    pev(id, pev_origin, temporigin);
    pev(id, pev_v_angle, angle);
 
    new mark = fm_create_entity("info_target");
    if( !pev_valid(mark) )
        return PLUGIN_CONTINUE;
 
    set_pev( mark, pev_classname, "pokeitem" );
    set_pev( mark, pev_targetname, targname );
    fm_entity_set_model( mark, MODELS[MDL_POKEBALL] );
    set_pev( mark, pev_solid, SOLID_BBOX );
 
    fm_entity_set_size(mark,Float:{-5.0,-5.0,-5.0},Float:{5.0,5.0,5.0});
 
    fm_entity_set_origin( mark, temporigin );
    set_pev( mark, pev_angles, angle );
 
    set_pev( mark, pev_movetype, MOVETYPE_TOSS );
 
    new Float:time = get_ppcvar_float(pm_itemtime);
    if(time>0.0)
        set_task( time, "poke_remove_entity", mark+REMOVE_TASK );
 
    return PLUGIN_CONTINUE;
 }
 
 /////////////////////////////////////////
 //  When someone aims at someone else  //
 /////////////////////////////////////////
 public pokemon_statustext(id)
 {
    if(!Pokemod_Alive(id) || !PMon() )
        return PLUGIN_CONTINUE;
 
    new abody, aid, dist;
    get_user_aiming(id, aid, abody, dist);
 
    if( Pokemod_Alive(aid) ){
        //pokemon that use aiming
        if( !Pokemod_FF(id, aid) ){
            skills_handler(id, SI_LOOK);
        }
    }
    return PLUGIN_CONTINUE;
 }
 
 /////////////////////////////////////
 //  Used if no rounds for the mod  //
 /////////////////////////////////////
 public team_ready(id)
 {
    poke_round_end();
    set_task(0.1,"round_start");
    set_task(0.1,"pokemon_spawn",id);
 }
 /////////////////////////
 //  Every Round Start  //
 /////////////////////////
 public round_start()
 {
    debugMessage(0,2,"Round", "Started");
 
    #if MOD==CS
        #if ALLOW_WILD==1
            WildMessage();
        #endif
 
        new poke_ent;
        while( (poke_ent = fm_find_ent_by_class(-1,"pokeitem") ) ){
            fm_remove_entity(poke_ent);
            remove_task(poke_ent+REMOVE_TASK);
        }
        while( (poke_ent = fm_find_ent_by_class(-1,"pokemod_ent") ) ){
            fm_remove_entity(poke_ent);
            remove_task(poke_ent+REMOVE_TASK);
        }
        while( (poke_ent = fm_find_ent_by_class(-1,"poke_attack") ) ){
            fm_remove_entity(poke_ent);
            remove_task(poke_ent+REMOVE_TASK);
        }
    #endif
 
    if(!PMon()){
        poke_round_end();
        return PLUGIN_CONTINUE;
    }
 
    if(get_ppcvar_num(pm_pokeballs)==1){
        set_task(5.0, "SpawnPokeballs", 0);
    }
 
    remove_task(BUYTIME_TASK);
    CanBuy = true;
    new Float:buytime = get_ppcvar_float(pm_buytime);
    if(buytime>0.0){
        set_task(buytime*60,"EndBuying",BUYTIME_TASK);
    }
 
    new Float:freezetime = get_pcvar_float(mp_freezetime);
    if(freezetime>0.0){
        remove_task(FREEZE_TASK);
        FreezeTime = true;
        set_task(freezetime,"EndFreezeTime",FREEZE_TASK);
    }
 
    return PLUGIN_CONTINUE;
 }
 
 /////////////////////////
 //  Every Round Start  //
 /////////////////////////
 public poke_round_end()
 {
    debugMessage(0,2,"Round", "Ended");
 
    new poke_ent;
    while( ( poke_ent = fm_find_ent_by_class(-1,"pokemon") ) ){
        fm_remove_entity(poke_ent);
        remove_task(poke_ent+REMOVE_TASK);
    }
    #if MOD==CS
        while( ( poke_ent = fm_find_ent_by_class(-1,"pokemod_ent") ) ){
            fm_remove_entity(poke_ent);
            remove_task(poke_ent+REMOVE_TASK);
        }
        while( (poke_ent = fm_find_ent_by_class(-1,"poke_attack") ) ){
            fm_remove_entity(poke_ent);
            remove_task(poke_ent+REMOVE_TASK);
        }
    #endif
 
    //Remove old npcs if pm is off
    if(!PMon() || get_ppcvar_num(pm_pokecenter)<=0){
        for(new i=0;i<MAX_OAKS;i++)
            if(ValidPC(i)) fm_remove_entity(PCent[i]);
    }
    else{
        #if MOD==NS
        if(ns_is_combat()){
        #endif
            if(!ValidPC(1)) npc_pokecenter(1); //only recreate for normal teams
            if(!ValidPC(2)) npc_pokecenter(2);
        #if MOD==NS
        }
        #endif
    }
 
    #if SAVE_ROUNDS > 0
    if(SaveXPon()){
        #if SAVE_ROUNDS > 1
        if( ++save_round_count >= SAVE_ROUNDS ){
            save_round_count = 0;
        #endif
            save_all();
        #if SAVE_ROUNDS > 1
        }
        #endif
    }
    #endif
    #if SAVE_ROUNDS < 0
    if(SaveXPon()){
        new players[MAX_PLAYERS], pnum, id;
        poke_get_players( players, pnum );
 
        if( pnum <= abs( SAVE_ROUNDS ) )
            save_all();
        else{
            new loop_preventer;
            while( RandomSaves[0] < abs( SAVE_ROUNDS ) && loop_preventer++ < pnum ){
                id = players[ random( pnum ) ];
                if( !RandomSaves[id] ){
                    RandomSaves[id] = 1;
                    RandomSaves[0]++;
                    SaveXP(id, 1);
                }
            }
            if( loop_preventer >= pnum ){
                for( loop_preventer = 0; loop_preventer < pnum; loop_preventer++ )
                    RandomSaves[ players[loop_preventer] ] = 0;
            }
            RandomSaves[0] = 0;
        }
    }
    #endif
 }
 
 ////////////////////////////////////
 //  When Someone Changes Weapons  //
 ////////////////////////////////////
 public WeaponChange(id)
 {
    if( Pokemod_Alive(id) )
        SetSpeed(id);
 }
 
 ////////////////////////////////////////////////////////
 //  This is a loop that is being called every second  //
 //         some pokemon skills use this               //
 ////////////////////////////////////////////////////////
 public pokemon_loop()
 {
    if( PMon() ){
 
        //creating things here so we dont create them each time in the for loop
        static players[MAX_PLAYERS], pnum, id, i;
        poke_get_players(players, pnum, PLAYER_ALIVE);
 
        static aid, ick, aTeam;
 
        if( ++gtime >= 20 )
            gtime = 0;
 
        for( i = 0; i < pnum; i++ )
        {
            id = players[i];
 
            // update their team every second
            Pokemod_Team(id, true);
 
            if( BindUsed[id]>0.0 && BindUsed[id]-get_gametime() <= 0.0 ){
                BindUsed[id] = 0.0;
            }
 
            if( !is_user_bot(id) )
                PokeDisplay(id,id);
 
            if( PM_disabled != PM_ON )
                continue;
 
            if( entity_in_water(id) )
                InWater(id);
 
            if( g_Status[id][STATUS_FROZEN] ){
                AddStatus(id, STATUS_FROZEN, -1);
                Freeze(id);
            }
 
            skills_handler(id, SI_LOOP);
 
            if( !is_user_bot(id) && HasSilphScope(id) != MAX_ITEMS ){
 
                for(ick = 0; ick<pnum; ick++)
                {
                    aid = players[ick];
 
                    if( id == aid )
                        continue;
 
                    if( PokeType[Pokemon[aid]] & TYPE_GHOST ){ //theyre a ghost so lets play the sprite
 
                        if(fm_is_ent_visible(id, aid)){
 
                            aTeam = Pokemod_Team(aid);
 
                            //Make a line
                            MakeLine_Ent(id,id,aid,SPRITE_INDEX[SPR_ZBEAM6],1,1,10,10,0,TeamColors[aTeam][0],TeamColors[aTeam][1],TeamColors[aTeam][2],200,0);
                        }
                    }
                }
            }
        }
        poke_get_players(players, pnum, PLAYER_DEAD|PLAYER_REAL);
        for( i = 0; i < pnum; i++ )
        {
            id = players[i];
            aid = pev(id, pev_iuser2);
            if( id != aid )
                PokeDisplay(id,aid);
        }
    }
 }
 
 ////////////////////////////////////
 //  When a client says something  //
 ////////////////////////////////////
 public HandleSay(id)
 {
    static said[192], cow;
    read_args(said,191);
    remove_quotes(said);
 
    //remove the / if it is there
    if( equali(said,"/",1 ) ) cow = 1;
    else cow = 0;
 
    if((containi(said[cow], "say") != -1 ) || (containi(said[cow], "type") != -1 ))
        return PLUGIN_CONTINUE;
    if( !PMon() ){
        if(containi(said[cow], "poke") != -1) {
            poke_printlang(id,"POKEMOD_DISABLED")
            return CHAT_SPAM
        }
    }
    else {
        new first_message[21], dummy[2]
        strbreak(said[cow], first_message, 20, dummy, 1)
 
        if((equali(first_message,"help",4 ) && containi(first_message, "poke") != -1 )
        || (equali(first_message,"poke",4 ) && containi(first_message, "help") != -1 )
        ) {
            pokehelp(id)
            return CHAT_SPAM
        }
 #if POKERANK_SYSTEM==1
        else if( equali(first_message,"pokerank",8)
        || equali(first_message,"pokemaster",10)
        || equali(first_message,"elite4",6)
        || equali(first_message,"elitefour",9)
        ){
            PlayersRanks(id, true)
            return CHAT_SPAM
        }
 #endif
 #if ALLOW_WILD==1
        else if(equali(first_message,"trainer")){
            if(g_isWild[id]>0){
                g_isWild[id] = -1
                UnAssignWild(id)
            }
            else
                poke_printlang(id, "POKEMOD_TRAINERALRDY")
            return CHAT_SPAM
        }
        else if(equali(first_message,"wild")){
            if(!g_isWild[id]){
                g_isWild[id] = 1
                AssignWild(id, true)
            }
            else{
                if(g_isWild[id]==1)
                    poke_printlang(id, "POKEMOD_WILDALRDY")
                else
                    poke_printlang(id, "POKEMOD_WILDDIE")
            }
            return CHAT_SPAM
        }
 #endif
        else if(equali(first_message,"pokecommand",11)
        || (containi(said[cow],"what")!=-1 && containi(said[cow],"bind")!=-1 && (containi(said[cow],"skill")!=-1 || containi(said[cow],"power")!=-1 || containi(said[cow],"poke")!=-1))){
            pokecommands(id)
            return CHAT_SPAM
        }
        else if(equali(first_message, "pokedex")) {
            pokedex(id, said[cow], true)
            return CHAT_SPAM
        }
        else if(equali(first_message, "pokeitem")) {
            new Left[NAME_LENGTH], Right[151]
            strbreak(said[cow], Left, NAME_LENGTH-1, Right, 150);
            strbreak(Right, Left, NAME_LENGTH-1, Right, 1);
            itemhelp(id, NameToItem(Left,false), true);
            return CHAT_SPAM
        }
        else if(equali(first_message, "pokemenu")) {
            new center = NearOakCheck(id)
            if(center >= 0){
                new parm[2]
                parm[0] = id
                parm[1] = center
                set_task(0.1,"PokeMenu",0,parm,2)
            }
            else{
                poke_printlang(id, "POKEMOD_OAKCLOSEDEAD")
            }
            return CHAT_SPAM
        }
        else if(equali(first_message, "pokehud")) {
            new Left[25], Right[151]
            strbreak(said[cow], Left, 24, Right, 150)
            strbreak(Right, Left, 24, Right, 150)
            if(equali(Left, "up"))
                PlayersSet[id][SET_HUD_Y]--
            else if(equali(Left, "down"))
                PlayersSet[id][SET_HUD_Y]++
            return CHAT_SPAM
        }
        else if(equali(first_message, "mypoke", 6)) {
            MyPoke(id)
            return CHAT_SPAM
        }
        else if(    ( (containi(said[cow], "how") != -1) || (containi(said[cow], "?") != -1) )
        &&            ( (containi(said[cow], "poke") != -1) || (containi(said[cow], "power") != -1) || (containi(said[cow], "skill") != -1) )
        ){
            poke_printlang(id, "POKEMOD_HELPWITH")
            return CHAT_SPAM
        }
        else if(containi(said[cow], "poke") != -1
        && ((containi(said[cow], "maker") != -1)||(containi(said[cow], "creator") != -1)||(containi(said[cow], "team") != -1))) {
            poke_print(0,print_chat, "PokeMod Team: %s", POKETEAM)
            return CHAT_SPAM
        }
        else if(equali(first_message, "theme") || equali(first_message, "poketheme")) {
            client_cmd(id,"play %s",SOUNDS[SND_THEME]);
            return CHAT_SPAM
        }
        else if(equali(first_message, "pokemart") || equali(first_message, "buy")) {
            if(!get_ppcvar_num(pm_pokemart_open)){
                poke_printlang(id, "POKEMOD_MARTCLOSE")
                return CHAT_SPAM
            }
 
            new Left[NAME_LENGTH], Right[151], cat, item, amount;
            strbreak(said[cow], Left, NAME_LENGTH-1, Right, 150);
            strbreak(Right, Left, NAME_LENGTH-1, Right, 150);
 
            if( equali(Left, EMPTY) )
                ShopMenu( id );
 
            item = NameToItem(Left, false);
            cat = NameToCat(Left);
 
            if( cat == MAX_ITYPE && item == MAX_ITEMS ){
                poke_printlang(id, "POKEMOD_NOITEM")
                return CHAT_SPAM;
            }
            if( cat != MAX_ITYPE ){
                ShopMenu(id, cat);
                return CHAT_SPAM;
            }
 
            strbreak(Right, Left, NAME_LENGTH-1, Right, 150)
            amount = str_to_num(Left)
            if(amount < 1)
                amount = 1
 
            #if MAX_AMOUNT_TO_BUY > 0
            if( amount > MAX_AMOUNT_TO_BUY ){
                poke_printlang(id, "POKEMOD_MAXBUY",MAX_AMOUNT_TO_BUY)
                return CHAT_SPAM
            }
            #endif
 
            buy_item(id, item, amount)
            return CHAT_SPAM
        }
        else if(equali(first_message, "sell")) {
            new Left[NAME_LENGTH], Right[151], item, amount
            strbreak(said[cow], Left, NAME_LENGTH-1, Right, 150)
            strbreak(Right, Left, NAME_LENGTH-1, Right, 150)
            item = NameToItem(Left,false)
            if(!item){
                poke_printlang(id, "POKEMOD_NOITEM")
                return CHAT_SPAM
            }
            strbreak(Right, Left, NAME_LENGTH-1, Right, 150)
            amount = str_to_num(Left)
            if(amount < 1)
                amount = 1
 
            #if MAX_AMOUNT_TO_BUY > 0
            if( amount > MAX_AMOUNT_TO_BUY ){
                poke_printlang(id, "POKEMOD_MAXSELL",MAX_AMOUNT_TO_BUY)
                return CHAT_SPAM
            }
            #endif
 
            SellItem(id, item, amount)
            return CHAT_SPAM
        }
        else if(containi(first_message, "player") != -1 && ((containi(first_message, "skill") != -1)||(containi(first_message, "poke") != -1)||(containi(first_message, "power") != -1))) {
            PlayersPokemon(id, true)
            return CHAT_SPAM
        }
        else if(equali(first_message, "cancel")) {
            if(task_exists(id+RELEASE_TASK)){
                remove_task(id+RELEASE_TASK)
                remove_task(id+RELEASE2_TASK)
                poke_printlang(id, "POKEMOD_RELCANC")
            }
            else
                poke_printlang(id, "POKEMOD_NOTREL")
            return CHAT_SPAM
        }
        else if(equali(first_message, "finalrelease")) {
            if(task_exists(id+RELEASE_TASK)){
                remove_task(id+RELEASE2_TASK)
                change_task( id+RELEASE_TASK, 0.1 )
            }
            else{
                new Left[NAME_LENGTH], Right[151], pid
                strbreak(said[cow], Left, NAME_LENGTH-1, Right, 150)
                strbreak(Right, Left, NAME_LENGTH-1, Right, 150)
                if( (pid = NameToPoke(Left, true, id)) ){
                    new releaseparm[2];
                    releaseparm[0] = id;
                    releaseparm[1] = pid;
                    FinalRelease(releaseparm);
                }
                else
                    poke_printlang(id, "POKEMOD_NOTREL")
            }
            return CHAT_SPAM
        }
        else if(containi(first_message, "player") != -1 && containi(first_message, "item") != -1) {
            PlayersItems(id, true)
            return CHAT_SPAM
        }
        else if(equali(first_message, "use")) {
            if( Pokemod_Alive(id) ){
                if( PokeItem(id) )
                    ItemUseMenu(id);
                new aid, body;
                get_user_aiming(id, aid, body);
                if( !EntIsPC(aid) )
                    return CHAT_SPAM
            }
            ShopMenu(id);
        }
        else if(equali(first_message,"save") || equali(first_message,"pokesave")){
            if(g_isWild[id]>0){
                poke_printlang(id, "POKEMOD_WILDSAVE")
                return CHAT_SPAM
            }
            else{
                if(SaveXPon()){
                    if( SaveXP(id, 0) )
                        poke_printlang(id, "POKEMOD_SAVED")
                    return CHAT_SPAM
                }
                else{
                    poke_printlang(id, "POKEMOD_NOSAVE")
                    return PLUGIN_HANDLED
                }
            }
        }
        else if( g_isWild[id] < 1 ){
            if(equali(first_message, "switch")) {
 
                new Left[NAME_LENGTH], Right[151]
                strbreak(said[cow], Left, NAME_LENGTH-1, Right, 150) //isolate the command
 
                strbreak(Right, Left, NAME_LENGTH-1, Right, 150) //isolate first thing
                new temp = NameToPoke(Left, _, id)
                if(!temp){
                    poke_printlang(id, "POKEMOD_NOPOKE1")
                    return CHAT_SPAM
                }
 
                strbreak(Right, Left, NAME_LENGTH-1, Right, 150) //isolate second thing
                new temp2 = NameToPoke(Left, _, id)
                if(!temp2){
                    poke_printlang(id, "POKEMOD_NOPOKE2")
                    return CHAT_SPAM
                }
                if(temp==temp2){
                    poke_printlang(id, "POKEMOD_SWITCHSAME")
                    return CHAT_SPAM
                }
 
                new slot = Slot(id, temp, CHECK_ALL)
                new slot2 = Slot(id, temp2, CHECK_ALL)
 
                if( !ValidSlot( slot ) || !ValidSlot( slot2 ) ){
                    poke_printlang(id, "POKEMOD_SWITCHHAVE")
                    return CHAT_SPAM
                }
 
                if( (slot>=MAX_ACTIVE_POKES || slot2>=MAX_ACTIVE_POKES) && NearOakCheck(id)==-1 ){
                    poke_printlang(id, "POKEMOD_SWITCHPC")
                    return CHAT_SPAM
                }
 
                //save the thing in slot
                new PlaceHolder = PlayersXP[id][slot];
 
                //overwrite thing in slot with slot2
                PlayersPoke[id][slot] = temp2;
                PlayersXP[id][slot] = PlayersXP[id][slot2];
 
                //overwrite thing in slot2 with saved thing
                PlayersPoke[id][slot2] = temp;
                PlayersXP[id][slot2] = PlaceHolder;
 
                RefreshLevels(id);
 
                if( Pokemon[id] == temp ) PlayersActive[id] = slot2;
                else if( Pokemon[id] == temp2 ) PlayersActive[id] = slot;
 
                return CHAT_SPAM;
            }
            if(equali(first_message, "send")) {
 
                new Left[NAME_LENGTH], Right[151]
                strbreak(said[cow], Left, NAME_LENGTH-1, Right, 150) //isolate the command
 
                strbreak(Right, Left, NAME_LENGTH-1, Right, 150) //isolate first thing
                new temp = NameToPoke(Left, _, id)
                if(!temp){
                    poke_printlang(id, "POKEMOD_NOPOKE")
                    return CHAT_SPAM
                }
 
                new slot = Slot(id, temp, CHECK_ALL)
                new slot2 = Slot(id, 0, CHECK_PC)
 
                if( PlayersActive[id] == slot ){
                    poke_printlang(id, "POKEMOD_PCNOACTIVE")
                    return CHAT_SPAM
                }
                if( !ValidSlot(slot) ){
                    poke_printlang(id, "POKEMOD_PCSENDHAVE")
                    return CHAT_SPAM
                }
                if( !ValidSlot(slot2) ){
                    poke_printlang(id, "POKEMOD_PCSENDROOM")
                    return CHAT_SPAM
                }
 
                if((slot>=MAX_ACTIVE_POKES || slot2>=MAX_ACTIVE_POKES)&& NearOakCheck(id)==-1){
                    poke_printlang(id, "POKEMOD_SENDCLOSE")
                    return CHAT_SPAM
                }
 
                //overwrite thing in slot2 with slot
                PlayersPoke[id][slot2] = PlayersPoke[id][slot]
                PlayersXP[id][slot2] = PlayersXP[id][slot]
 
                //overwrite thing in slot2 with saved thing
                PlayersPoke[id][slot] = 0
                PlayersXP[id][slot] = 0
 
                RefreshLevels(id);
 
                poke_printlang(id, "POKEMOD_PCSENT", PokeToName(PlayersPoke[id][slot2]));
 
                if( !SwitchPoke(id, Pokemon[id]) )
                    SwitchPoke(id, PlayersPoke[id][PlayersActive[id]])
 
                return CHAT_SPAM
            }
            if(equali(first_message, "retrieve")) {
 
                new Left[NAME_LENGTH], Right[151]
                strbreak(said[cow], Left, NAME_LENGTH-1, Right, 150) //isolate the command
 
                strbreak(Right, Left, NAME_LENGTH-1, Right, 150) //isolate first thing
                new temp = NameToPoke(Left, _, id)
                if(!temp){
                    poke_printlang(id, "POKEMOD_NOPOKE")
                    return CHAT_SPAM
                }
 
                new slot = Slot(id, 0, CHECK_ALL)
                new slot2 = Slot(id, temp, CHECK_PC)
 
                if( !ValidSlot(slot) ){
                    poke_printlang(id, "POKEMOD_PCRETROOM")
                    return CHAT_SPAM
                }
                if( !ValidSlot(slot2) ){
                    poke_printlang(id, "POKEMOD_PCRETHAVE")
                    return CHAT_SPAM
                }
 
                if( (slot>=MAX_ACTIVE_POKES || slot2>=MAX_ACTIVE_POKES) && NearOakCheck(id)==-1 ){
                    poke_printlang(id, "POKEMOD_RETCLOSE")
                    return CHAT_SPAM
                }
 
                //overwrite thing in slot with slot2
                PlayersPoke[id][slot] = PlayersPoke[id][slot2]
                PlayersXP[id][slot] = PlayersXP[id][slot2]
 
                //overwrite thing in slot2 with saved thing
                PlayersPoke[id][slot2] = 0
                PlayersXP[id][slot2] = 0
 
                RefreshLevels(id);
 
                poke_printlang(id, "POKEMOD_PCRET", PokeToName(PlayersPoke[id][slot]));
 
                return CHAT_SPAM
            }
            if(equali(first_message, "release")) {
                new Left[NAME_LENGTH], Right[151], pid
                strbreak(said[cow], Left, NAME_LENGTH-1, Right, 150)
                strbreak(Right, Left, NAME_LENGTH-1, Right, 150)
                pid = NameToPoke(Left, _, id)
 
                if( pid )
                    ReleasePoke(id, pid)
                else{
                    #if RELEASE_MENU == 1
                        SetActionMenu(id, AC_RELEASE )
                    #else
                        poke_printlang(id, "POKEMOD_NOPOKE")
                    #endif
                }
 
                return CHAT_SPAM
            }
            else if(equali(first_message, "go")) {
                new Left[NAME_LENGTH], Right[151], pid
                strbreak(said[cow], Left, NAME_LENGTH-1, Right, 150)
                strbreak(Right, Left, NAME_LENGTH-1, Right, 150)
                pid = NameToPoke(Left, _, id)
                if(!SwitchPoke(id, pid, false) && equali(said[cow], "go")){
                    SetActionMenu( id, AC_GO )
                }
                return CHAT_SPAM
            }
            else if(equali(first_message, "give")) {
                new Left[NAME_LENGTH], Right[151], Name[32], pid, players[MAX_PLAYERS], pnum
 
                strbreak(said[cow], Left, NAME_LENGTH-1, Right, 150)//get rid of the command
                strbreak(Right, Left, NAME_LENGTH-1, Right, 150)//get the name
 
                if( get_info(id, Left, Name,31, false, players, pnum, false) ){
                    if( pnum == 1 ){
                        strbreak(Right, Left, NAME_LENGTH-1, Right, 150)//get the item name
                        pid = NameToItem(Left)
 
                        if( pid != MAX_ITEMS ){
                            strbreak(Right, Left, NAME_LENGTH-1, Right, 150)//get how many
                            TradeItem(id, pid, players[0], str_to_num(Left))
                        }
                        else{
                            pid = NameToPoke(Left)
                            if( !TradePoke(id, pid, players[0]) )
                                poke_printlang(id, "POKEMOD_NOPOKEITEM")
                        }
                        return CHAT_SPAM
                    }
                }
                poke_printlang(id, "POKEMOD_NOPLAYER")
                return CHAT_SPAM
            }
        }
    }
    return PLUGIN_CONTINUE
 }
 
 ///////////////////////////////
 //  Blocks FullUpdate Abuse  //
 ///////////////////////////////
 public fullupdate(id)
    return PLUGIN_HANDLED_MAIN
 
 //////////////////////////////////////
 //  When something touches another  //
 //////////////////////////////////////
 public touches(ptr, ptd)
 {
    //allrighty... lets break it down!
 
    if( PM_disabled == PM_OFF || !pev_valid(ptr) )
        return PLUGIN_CONTINUE;
 
    static szClass[32];
    pev(ptr, pev_classname, szClass, 31);
 
    if(equali(szClass, "poke_rock"))
        rock_touch(ptr,ptd);
    else if(equali(szClass, "psy_beam"))
        psybeam_touch(ptr,ptd);
    else if(equali(szClass, "poke_attack"))
        attack_touch(ptr,ptd);
    else if(equali(szClass, "player"))
        player_touch(ptr,ptd);
 
    return PLUGIN_CONTINUE;
 }
 ///////////////////////////////////////
 //  When a player touches something  //
 ///////////////////////////////////////
 player_touch(ptr, ptd)
 {
    if( !PMon() || !Pokemod_Alive(ptr) || !pev_valid(ptd) )
        return PLUGIN_CONTINUE;
 
    #if TOUCH_SKILL_TEAM == 0
    if( !Pokemod_FF(ptr, ptd) ){
    #endif
 
    PlayerDamageInfo[ptr][PD_ATTACKER] = ptd;
    PlayerDamageInfo[ptr][PD_DAMAGE] = PlayerDamageInfo[ptr][PD_WEAPON] = 0;
    skills_handler(ptr, SI_TOUCH);
    PlayerDamageInfo[ptr][PD_ATTACKER] = 0;
 
    #if TOUCH_SKILL_TEAM == 0
    }
    #endif
 
    //only get classnames if it wasn't a player
    static szClassD[32];
    pev(ptd, pev_classname, szClassD, 31);
 
    if(equal(szClassD, "npc_pokecenter")){
 
        if(g_Status[ptr][STATUS_OAK_STOP])
            return PLUGIN_CONTINUE;
 
        debugMessage(ptr,8,"Player", "touched a pokecenter");
 
        //need to check if its team specific (flag 'c')
        new oak_props[MAX_OAKPROP];
        pev(ptd, pev_globalname, oak_props, MAX_OAKPROP-1);
        if(containi(oak_props, "c")!=-1 && (Pokemod_Team(ptd)!=0 && Pokemod_Team(ptr)!=Pokemod_Team(ptd))){
            if(!is_user_bot(ptr))
                poke_printlang(ptr,"POKEMOD_OTHERTEAM");
            return PLUGIN_CONTINUE;
        }
 
        if(is_user_bot(ptr))
            BotCenter(ptr);
        else{
            new parm[2];
            parm[0] = ptr;
            parm[1] = ptd;
            PokeMenu( parm );
        }
        return PLUGIN_CONTINUE;
    }
    if(equal(szClassD, "pokemon")){
        debugMessage(ptr,6,"Player", "touched a pokeball pokemon");
 
        new poke, TargName[NAME_LENGTH];
        pev(ptd, pev_targetname, TargName, NAME_LENGTH-1);
 
        Pokemod_Team(ptr, true);
        if( Pokemod_FF(ptr, ptd) || FFAon() ){
            poke_printlang(ptr,"POKEMOD_OTHERTEAM");
            UnSolid(ptd);
            return PLUGIN_CONTINUE;
        }
        if( !ValidSlot( Slot(ptr) ) ){
            poke_printlang(ptr,"POKEMOD_NOROOM");
            UnSolid(ptd);
            return PLUGIN_CONTINUE;
        }
        poke = NameToPoke(TargName);
        if( ValidSlot( Slot(ptr,poke) ) ){
            poke_printlang(ptr,"POKEMOD_DUPLICATE", TargName);
            UnSolid(ptd);
            return PLUGIN_CONTINUE;
        }
 
        if(AddPoke(ptr, poke)){
            #if CATCH_TELEPORT > 0
                EscapeRope(ptr, 0);
                poke_printlang(ptr,"POKEMOD_CATCHTELE", TargName);
            #endif
 
            poke_sound(ptr,CHAN_VOICE,SND_BODYDROP);
            fm_remove_entity(ptd);
            remove_task(ptd+REMOVE_TASK);
 
            #if POKEBALL_RESPAWN == 1
            SpawnPokeballs();
            #endif
 
            return PLUGIN_CONTINUE;
        }
    }
    if(equal(szClassD, "pokeitem")){
        debugMessage(ptr,6,"Player", "touched a pokeitem");
 
        new bool:given=false, item, amount, Left[9], Right[151], amountgiven, ilen, newtargetname[151];
 
        pev(ptd, pev_targetname, Right, 150);
 
        while( ValidData(Right) ){
            strbreak(Right, Left, 8, Right, 150);
            item = str_to_num(Left);
            strbreak(Right, Left, 8, Right, 150);
            amount = str_to_num(Left);
            if( ValidItem(item) && amount ){
                amountgiven = GiveItem(ptr, item, amount);
                if( amountgiven == amount )
                    given = true;
                else
                    ilen += formatex(newtargetname[ilen], (151-ilen), "%d %d ", item, amount - amountgiven);
            }
        }
 
        if( given ){
            poke_sound(ptd,CHAN_VOICE,SND_BODYDROP);
            #if AUTO_ITEMS > 0
                AutoItems(ptr);
            #endif
        }
        else{
            poke_printlang(ptr,"POKEMOD_NOPICKUP");
        }
 
        if( !ValidData(newtargetname) ){
            fm_remove_entity(ptd);
            remove_task(ptd+REMOVE_TASK);
        }
        else{
            set_pev(ptd, pev_targetname, newtargetname);
            UnSolid(ptd);
        }
 
        return PLUGIN_CONTINUE;
    }
    if(equal(szClassD,"grenade")){
        new model[40];
        pev(ptd, pev_model, model, 39 );
        if( equali(model, MODELS[MDL_POKEBALL] ) ){
            debugMessage(ptr,5,"Player", "touched a poke-grenade")
 
            if(ptd==PlayerEnt[ptr]){
                fm_remove_entity(ptd);
                set_task(1.0,"delay_grenade",ptr);
                PlayerEnt[ptr] = 0;
                set_bind(ptr);
                poke_sound(ptr,CHAN_VOICE,SND_BODYDROP);
            }
            else {
                for( new i=1; i < MAX_PLAYERS; i++ ){
                    if(PlayerEnt[i]==ptd){
                        sound_cast(i);
                        set_pev(ptd, pev_dmgtime, 0.1);
                        set_pev(ptd, pev_nextthink, 0.1);
                        set_pev(ptd, pev_owner, i);
                        PlayerEnt[i] = 0;
                        break;
                    }
                }
            }
        }
        return PLUGIN_CONTINUE;
    }
    return PLUGIN_CONTINUE;
 }
 public delay_grenade(id)
    give_grenade(id);
 
 //////////////////////////////////////////
 //  When a poke rock touches something  //
 //////////////////////////////////////////
 attack_touch(ptr, ptd)
 {
    if( !pev_valid(ptr) )
        return;
 
    new aid = pev(ptr, pev_owner);
    new damage = pev(ptr, pev_iuser1);
    new skill = pev(ptr, pev_iuser2);
    new szClass[32]
    SkillToName( skill, szClass, 31 );
 
    debugMessage(0,3,"Skill", "%s touched something", szClass);
 
    if( damage && aid != ptd && Pokemod_Alive(ptd) )
        skilldamage(ptd, aid, damage, skill);
 
    if(equali(szClass, "Spike Cannon")){
        set_pev(ptr,pev_velocity,Float:{0.0,0.0,0.0});
        poke_sound(ptr, CHAN_WEAPON, SND_HIT);
        set_pev(ptr, pev_iuser1, 0);
        set_task(0.3,"poke_remove_entity",ptr+REMOVE_TASK);
    }
    else if(equali(szClass, "Pin Missile")){
        new Float:temporigin[3];
        if( Pokemod_Alive(ptd) && ptd != aid ){
            pev(ptr, pev_velocity, temporigin);
            temporigin[2] = floatmax(temporigin[2], 10.0);
            set_pev(ptd, pev_velocity, temporigin);
        }
 
        if( pev_valid(ptr) ){
            pev(ptr, pev_origin, temporigin);
            message_begin(MSG_BROADCAST, SVC_TEMPENTITY) //message begin
            write_byte(TE_SPRITE)
            write_coord(floatround(temporigin[0])) // start position
            write_coord(floatround(temporigin[1]))
            write_coord(floatround(temporigin[2]))
            write_short(SPRITE_INDEX[SPR_BIGSPIT]) // sprite index
            write_byte(10) // scale in 0.1's
            write_byte(100) // brightness
            message_end()
 
            poke_sound(ptr, CHAN_WEAPON, SND_HIT);
        }
        poke_remove_entity(ptr+REMOVE_TASK);
    }
    else if(equali(szClass, "Bone Club")){
        set_pev(ptr, pev_velocity, Float:{0.0,0.0,0.0});
        set_pev(ptr, pev_iuser1, 0);
        set_pev(ptr, pev_sequence, 0);
        if( ptd == aid ){
            poke_sound(ptd, CHAN_WEAPON, SND_BODYDROP);
            poke_remove_entity(ptr+REMOVE_TASK);
        }
        else if(damage)
            poke_sound(ptr, CHAN_WEAPON, SND_HIT);
    }
    else if(equali(szClass, "Bonemerang")){
 
        entity_set_follow(ptr, aid, 1.0*BONE_VEC);
 
        if( ptd == aid ){
            poke_sound(ptd, CHAN_WEAPON, SND_BODYDROP);
            poke_remove_entity(ptr+REMOVE_TASK);
        }
        else
            poke_sound(ptr, CHAN_WEAPON, SND_HIT);
    }
    else{
        poke_remove_entity(ptr+REMOVE_TASK);
    }
 }
 
 //////////////////////////////////////////
 //  When a poke rock touches something  //
 //////////////////////////////////////////
 rock_touch(ptr, ptd)
 {
    new skill = pev(ptr, pev_iuser2);
    new szClass[32]
    SkillToName( skill, szClass, 31 );
 
    debugMessage(0,3,"Skill", "%s touched something", szClass);
 
    new aid = pev(ptr, pev_owner)
    if( aid == ptd )    return PLUGIN_CONTINUE
 
    new maxdamage = ROCK_DAMAGE
    AddLvl(aid, maxdamage)
 
    if( !ValidPlayer(ptd) ){
        if( PokeEntDamage(ptd, szClass, maxdamage) ){
            rock_touch(ptr, 0);
            return PLUGIN_CONTINUE;
        }
    }
 
    new spritetoshow;
    new damradius = 200;
    new Float:fl_vExplodeAt[3];
    pev(ptr, pev_origin, fl_vExplodeAt);
    AddLvl(aid, damradius);
 
    if( SkillType[skill]&TYPE_FIRE && !entity_in_water(ptr) ){
        spritetoshow = SPRITE_INDEX[SPR_EEXPLO];
        skillAoEdamage(aid, fl_vExplodeAt, damradius, maxdamage, skill, _, _, STATUS_BURN, 2);
    }
    else {
        spritetoshow = SPRITE_INDEX[SPR_XPLODE];
        fl_vExplodeAt[2] += 60;
        skillAoEdamage(aid, fl_vExplodeAt, damradius, maxdamage, skill);
    }
 
    message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
    write_byte(17);
    write_coord(floatround(fl_vExplodeAt[0]));
    write_coord(floatround(fl_vExplodeAt[1]));
    write_coord(floatround(fl_vExplodeAt[2]));
    write_short(spritetoshow);
    write_byte(20);
    write_byte(200);
    message_end();
 
    poke_sound(ptr, CHAN_WEAPON, SND_EXM2);
 
    fm_remove_entity(ptr);
 
    return PLUGIN_CONTINUE;
 }
 
 /////////////////////////////////////////
 //  When a psy beam touches something  //
 /////////////////////////////////////////
 psybeam_touch(ptr, ptd)
 {
    new szClass[NAME_LENGTH];
    new damradius = 200;
    new maxdamage = PSYBEAM_DAMAGE;
    new aid = pev(ptr, pev_owner);
    new skill = pev(ptr, pev_iuser2);
    SkillToName(skill, szClass);
 
    debugMessage(0,3,"Skill", "%s touched something", szClass)
 
    AddLvl(aid, maxdamage);
 
    if( !ValidPlayer(ptd) )
        PokeEntDamage(ptd, szClass, maxdamage);
 
    new Float:fl_vExplodeAt[3];
    pev(ptr, pev_origin, fl_vExplodeAt);
 
    skillAoEdamage(aid, fl_vExplodeAt, damradius, maxdamage, skill)
 
    message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
    write_byte(17);
    write_coord(floatround(fl_vExplodeAt[0]));
    write_coord(floatround(fl_vExplodeAt[1]));
    write_coord(floatround(fl_vExplodeAt[2] + 60));
    write_short(SPRITE_INDEX[SPR_XPLODE]);
    write_byte(20);
    write_byte(200);
    message_end();
 
    poke_sound(ptr, CHAN_WEAPON, SND_EXM2);
 
    if(Pokemod_Alive(aid)){
        self_view(aid);
        bind_used(aid, skill);
    }
    PlayerEnt[aid] = 0;
    if( pev_valid(ptr) )
        fm_remove_entity(ptr);
 
    return PLUGIN_CONTINUE;
 }
 
 /////////////////////////////////////
 //  When a surf touches something  //// Note that this is not being registered, i just pretend it is. (im actually using a function to see if they are near it)
 /////////////////////////////////////
 surf_touch(ptr, ptd)
 {
    if( ptr <= 0 || !pev_valid(ptr) ) return PLUGIN_CONTINUE
 
    new aid = pev(ptr, pev_owner);
    new skill = pev(ptr, pev_iuser2);
 
    debugMessage(0,3,"Skill", "%s touched something", SkillToName(skill))
 
    if( aid == ptd )
        return PLUGIN_CONTINUE
 
    if( Pokemod_Alive(ptd) ){
        if( !Pokemod_FF(ptd, ptr) || FFon() ){
            new damage = pev(ptr, pev_iuser1);
            new Float:velocity[3];
 
            pev(ptr, pev_velocity, velocity)
            velocity[2] = 10.0
            set_pev(ptd, pev_velocity, velocity)
 
            //this will take care of the InWater
            skilldamage(ptd, aid, damage, skill)
        }
        else
            InWater(ptd)
    }
    return PLUGIN_CONTINUE
 }
 UnSolid(ent, Float:time=5.0)
 {
    if( pev_valid(ent) && !task_exists(ent+SOLID_TASK) ){
        set_pev(ent, pev_solid, SOLID_NOT);
        set_task(time, "Solidify", ent+SOLID_TASK);
    }
 }
 public Solidify(ent)
 {
    ent -= SOLID_TASK
    if( pev_valid(ent) ) set_pev(ent, pev_solid, SOLID_BBOX);
 }
 public log_block(type, msg[])
    return(log_block_state?FMRES_SUPERCEDE:FMRES_IGNORED);
 
 public forward_AddToFullPack(es_handle, e, entity, host, hostflags, player, pSet)
 {
    if( !player || entity==host )
        return FMRES_IGNORED
 
    if( Pokemod_Alive(entity) && Pokemod_Alive(host)
    && PokeType[Pokemon[entity]] & TYPE_GHOST ){
        if( HasSilphScope(host) != MAX_ITEMS )
        {
            set_es(es_handle, ES_RenderFx, kRenderFxGlowShell);
            set_es(es_handle, ES_RenderColor, TeamColors[Pokemod_Team(entity)] );
            set_es(es_handle, ES_RenderMode, kRenderNormal);
            set_es(es_handle, ES_RenderAmt, 0);
        }
    }
 
    return FMRES_IGNORED
 }