hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.04.25. 03:19



Jelenlévő felhasználók

Jelenleg 278 felhasználó van jelen :: 0 regisztrált, 0 rejtett és 278 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: nincs regisztrált felhasználó az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 2 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: Skin eltolódás
HozzászólásElküldve: 2020.08.24. 09:49 
Offline
Senior Tag
Avatar

Csatlakozott: 2018.02.01. 16:27
Hozzászólások: 225
Megköszönt másnak: 14 alkalommal
Megköszönték neki: 18 alkalommal
Hali!

  1. #define KinezetSzam 100
  2.  
  3. new OsszesKinezet[KinezetSzam][33], Kinezet[7][33];
  4.  
  5. new const Kinezetek[99][] =
  6. {
  7.     "M4A1 | Golden",
  8.     "M4A1 | Nightmare",
  9.     "M4A1 | Fade",
  10.     "M4A1 | Frost",
  11.     "M4A1 | Vanquish",
  12.     "M4A1 | Optimus",
  13.     "M4A1 | Hellfire",
  14.     "M4A1 | Dragon King",
  15.     "M4A1 | Cyrex",
  16.     "M4A1 | Toxicator",
  17.     "M4A1 | Hyper Beast",
  18.     "M4A1 | Decimator",
  19.     "M4A1 | Royal Purple",
  20.     "AK47 | Redline",
  21.     "AK47 | Fuel Injector",
  22.     "AK47 | Point Disarray",
  23.     "AK47 | Purple Pixel",
  24.     "AK47 | Silver Wood",
  25.     "AK47 | Vanquish",
  26.     "AK47 | Xan's",
  27.     "AK47 | Next Technology",
  28.     "AK47 | Anubis",
  29.     "AK47 | Wasteland Rebel",
  30.     "AK47 | The Empress",
  31.     "AK47 | Astronaut",
  32.     "AK47 | Bloodsport",
  33.     "FAMAS | Mlg",
  34.     "FAMAS | Spitfire",
  35.     "FAMAS | Roll Cage",
  36.     "FAMAS | Purple",
  37.     "FAMAS | Hexane",
  38.     "FAMAS | Skull",
  39.     "FAMAS | Red Destiny",
  40.     "FAMAS | Pixel",
  41.     "FAMAS | Tiger",
  42.     "FAMAS | Ice Cold",
  43.     "FAMAS | Gold Neon",
  44.     "FAMAS | Painkiller",
  45.     "FAMAS | Camo",
  46.     "AWP | Geometric",
  47.     "AWP | Dexpota",
  48.     "AWP | Flower",
  49.     "AWP | Lightning Strike",
  50.     "AWP | Flaming Hot",
  51.     "AWP | Colorway",
  52.     "AWP | Jacket",
  53.     "AWP | Snake Camo",
  54.     "AWP | Longun",
  55.     "AWP | Green Killer",
  56.     "AWP | Oni Taiji",
  57.     "AWP | Fever Dream",
  58.     "AWP | Cyrex",
  59.     "DEAGLE | Fade",
  60.     "DEAGLE | Spiderman",
  61.     "DEAGLE | Gold Scales",
  62.     "DEAGLE | Speedey",
  63.     "DEAGLE | Blaze",
  64.     "DEAGLE | Hypnotic",
  65.     "DEAGLE | Rainbow",
  66.     "DEAGLE | Wildfire",
  67.     "DEAGLE | Orochi",
  68.     "DEAGLE | Emperor Dragon",
  69.     "DEAGLE | Pixel Camo",
  70.     "DEAGLE | Light Blue",
  71.     "DEAGLE | Debra",
  72.     "DEAGLE | Multi Color",
  73.     "USP | Rainbow",
  74.     "USP | Bright Lines",
  75.     "USP | Golden",
  76.     "USP | Neo-Noir",
  77.     "USP | Caiman",
  78.     "USP | Fuel Injector",
  79.     "USP | Cyrex",
  80.     "USP | Kill Confirmed",
  81.     "USP | Blue Fire",
  82.     "USP | Fire",
  83.     "USP | Hyper Beast",
  84.     "USP | Pink Drop",
  85.     "USP | Dragon",
  86.     "USP | Vexter",
  87.     "USP | Electra",
  88.     "USP | Red",
  89.     "USP | Tiger",
  90.     "BUTTERFLY KNIFE | Marble Fade + Gloves",
  91.     "KARAMBIT KNIFE | Tiger Tooth + Gloves",
  92.     "BUTTERFLY KNIFE | Fade + Gloves",
  93.     "KNIFE | Kosova Albania + Gloves",
  94.     "KNIFE | Ahegao",
  95.     "KNIFE | Vaporwave",
  96.     "KNIFE | Rainbow + Gloves",
  97.     "KNIFE | Red & Black",
  98.     "KNIFE | Commando",
  99.     "KNIFE | Troll",
  100.     "KNIFE | Neon",
  101.     "KNIFE | Ultra",
  102.     "KNIFE | Griff",
  103.     "KNIFE | Gamma Doppler",
  104.     "KNIFE | Marble Fade",
  105.     "KNIFE | Navy Camo"
  106. };
  107.  
  108. new const M4a1_Kinezetek[][] =
  109. {
  110.     "models/teszt/m4a1/m41.mdl",
  111.     "models/teszt/m4a1/m42.mdl",
  112.     "models/teszt/m4a1/m43.mdl",
  113.     "models/teszt/m4a1/m44.mdl",
  114.     "models/teszt/m4a1/m45.mdl",
  115.     "models/teszt/m4a1/m46.mdl",
  116.     "models/teszt/m4a1/m47.mdl",
  117.     "models/teszt/m4a1/m48.mdl",
  118.     "models/teszt/m4a1/m49.mdl",
  119.     "models/teszt/m4a1/m410.mdl",
  120.     "models/teszt/m4a1/m411.mdl",
  121.     "models/teszt/m4a1/m412.mdl",
  122.     "models/teszt/m4a1/m413.mdl"
  123. };
  124.  
  125. new const Ak47_Kinezetek[][] =
  126. {
  127.     "models/teszt/ak47/ak1.mdl",
  128.     "models/teszt/ak47/ak2.mdl",
  129.     "models/teszt/ak47/ak3.mdl",
  130.     "models/teszt/ak47/ak4.mdl",
  131.     "models/teszt/ak47/ak5.mdl",
  132.     "models/teszt/ak47/ak6.mdl",
  133.     "models/teszt/ak47/ak7.mdl",
  134.     "models/teszt/ak47/ak8.mdl",
  135.     "models/teszt/ak47/ak9.mdl",
  136.     "models/teszt/ak47/ak10.mdl",
  137.     "models/teszt/ak47/ak11.mdl",
  138.     "models/teszt/ak47/ak12.mdl",
  139.     "models/teszt/ak47/ak13.mdl"
  140. };
  141.  
  142. new const Famas_Kinezetek[][] =
  143. {
  144.     "models/teszt/famas/fm1.mdl",
  145.     "models/teszt/famas/fm2.mdl",
  146.     "models/teszt/famas/fm3.mdl",
  147.     "models/teszt/famas/fm4.mdl",
  148.     "models/teszt/famas/fm5.mdl",
  149.     "models/teszt/famas/fm6.mdl",
  150.     "models/teszt/famas/fm7.mdl",
  151.     "models/teszt/famas/fm8.mdl",
  152.     "models/teszt/famas/fm9.mdl",
  153.     "models/teszt/famas/fm10.mdl",
  154.     "models/teszt/famas/fm11.mdl",
  155.     "models/teszt/famas/fm12.mdl",
  156.     "models/teszt/famas/fm13.mdl"
  157. };
  158.  
  159. new const Awp_Kinezetek[][] =
  160. {
  161.     "models/teszt/awp/awp1.mdl",
  162.     "models/teszt/awp/awp2.mdl",
  163.     "models/teszt/awp/awp3.mdl",
  164.     "models/teszt/awp/awp4.mdl",
  165.     "models/teszt/awp/awp5.mdl",
  166.     "models/teszt/awp/awp6.mdl",
  167.     "models/teszt/awp/awp7.mdl",
  168.     "models/teszt/awp/awp8.mdl",
  169.     "models/teszt/awp/awp9.mdl",
  170.     "models/teszt/awp/awp10.mdl",
  171.     "models/teszt/awp/awp11.mdl",
  172.     "models/teszt/awp/awp12.mdl",
  173.     "models/teszt/awp/awp13.mdl"
  174. };
  175.  
  176. new const Deagle_Kinezetek[][] =
  177. {
  178.     "models/teszt/deagle/dg1.mdl",
  179.     "models/teszt/deagle/dg2.mdl",
  180.     "models/teszt/deagle/dg3.mdl",
  181.     "models/teszt/deagle/dg4.mdl",
  182.     "models/teszt/deagle/dg5.mdl",
  183.     "models/teszt/deagle/dg6.mdl",
  184.     "models/teszt/deagle/dg7.mdl",
  185.     "models/teszt/deagle/dg8.mdl",
  186.     "models/teszt/deagle/dg9.mdl",
  187.     "models/teszt/deagle/dg10.mdl",
  188.     "models/teszt/deagle/dg11.mdl",
  189.     "models/teszt/deagle/dg12.mdl",
  190.     "models/teszt/deagle/dg13.mdl",
  191.     "models/teszt/deagle/dg14.mdl"
  192. };
  193.  
  194. new const Usp_Kinezetek[][] =
  195. {
  196.     "models/teszt/usp/usp1.mdl",
  197.     "models/teszt/usp/usp2.mdl",
  198.     "models/teszt/usp/usp3.mdl",
  199.     "models/teszt/usp/usp4.mdl",
  200.     "models/teszt/usp/usp5.mdl",
  201.     "models/teszt/usp/usp6.mdl",
  202.     "models/teszt/usp/usp7.mdl",
  203.     "models/teszt/usp/usp8.mdl",
  204.     "models/teszt/usp/usp9.mdl",
  205.     "models/teszt/usp/usp10.mdl",
  206.     "models/teszt/usp/usp11.mdl",
  207.     "models/teszt/usp/usp12.mdl",
  208.     "models/teszt/usp/usp13.mdl",
  209.     "models/teszt/usp/usp14.mdl",
  210.     "models/teszt/usp/usp15.mdl",
  211.     "models/teszt/usp/usp16.mdl",
  212.     "models/teszt/usp/usp17.mdl"
  213. };
  214.  
  215. new const Kes_Kinezetek[][] =
  216. {
  217.     "models/teszt/knife/ks1.mdl",
  218.     "models/teszt/knife/ks2.mdl",
  219.     "models/teszt/knife/ks3.mdl",
  220.     "models/teszt/knife/ks4.mdl",
  221.     "models/teszt/knife/ks5.mdl",
  222.     "models/teszt/knife/ks6.mdl",
  223.     "models/teszt/knife/ks7.mdl",
  224.     "models/teszt/knife/ks8.mdl",
  225.     "models/teszt/knife/ks9.mdl",
  226.     "models/teszt/knife/ks10.mdl",
  227.     "models/teszt/knife/ks11.mdl",
  228.     "models/teszt/knife/ks12.mdl",
  229.     "models/teszt/knife/ks13.mdl",
  230.     "models/teszt/knife/ks14.mdl",
  231.     "models/teszt/knife/ks15.mdl",
  232.     "models/teszt/knife/ks16.mdl"
  233. };
  234.  
  235. public plugin_precache()
  236. {
  237.     new Szoveg[128];
  238.  
  239.     for(new i; i < sizeof(Alap_Kinezetek); i ++)
  240.     {
  241.         precache_model(Alap_Kinezetek[i]);
  242.     }
  243.     for(new i; i < sizeof(M4a1_Kinezetek); i ++)
  244.     {
  245.         precache_model(M4a1_Kinezetek[i]);
  246.     }
  247.     for(new i; i < sizeof(Ak47_Kinezetek); i ++)
  248.     {
  249.         precache_model(Ak47_Kinezetek[i]);
  250.     }
  251.     for(new i; i < sizeof(Famas_Kinezetek); i ++)
  252.     {
  253.         precache_model(Famas_Kinezetek[i]);
  254.     }
  255.     for(new i; i < sizeof(Awp_Kinezetek); i ++)
  256.     {
  257.         precache_model(Awp_Kinezetek[i]);
  258.     }
  259.     for(new i; i < sizeof(Deagle_Kinezetek); i ++)
  260.     {
  261.         precache_model(Deagle_Kinezetek[i]);
  262.     }
  263.     for(new i; i < sizeof(Usp_Kinezetek); i ++)
  264.     {
  265.         precache_model(Usp_Kinezetek[i]);
  266.     }
  267.     for(new i; i < sizeof(Kes_Kinezetek); i ++)
  268.     {
  269.         precache_model(Kes_Kinezetek[i]);
  270.     }
  271. }
  272.  
  273. public KinezetValtas(iId)
  274. {
  275.     new iFegyver = get_user_weapon(iId);
  276.  
  277.     for(new i; i < sizeof(M4a1_Kinezetek); i ++)
  278.     {
  279.         if(Kinezet[0][iId] == i && iFegyver == CSW_M4A1)
  280.         {
  281.             set_pev(iId, pev_viewmodel2, M4a1_Kinezetek[i]);
  282.         }
  283.     }
  284.     for(new i; i < sizeof(Ak47_Kinezetek); i ++)
  285.     {
  286.         if(Kinezet[1][iId] == i && iFegyver == CSW_AK47)
  287.         {
  288.             set_pev(iId, pev_viewmodel2, Ak47_Kinezetek[i]);
  289.         }
  290.     }
  291.     for(new i; i < sizeof(Famas_Kinezetek); i ++)
  292.     {
  293.         if(Kinezet[2][iId] == i && iFegyver == CSW_FAMAS)
  294.         {
  295.             set_pev(iId, pev_viewmodel2, Famas_Kinezetek[i]);
  296.         }
  297.     }
  298.     for(new i; i < sizeof(Awp_Kinezetek); i ++)
  299.     {
  300.         if(Kinezet[3][iId] == i && iFegyver == CSW_AWP)
  301.         {
  302.             set_pev(iId, pev_viewmodel2, Awp_Kinezetek[i]);
  303.         }
  304.     }
  305.     for(new i; i < sizeof(Deagle_Kinezetek); i ++)
  306.     {
  307.         if(Kinezet[4][iId] == i && iFegyver == CSW_DEAGLE)
  308.         {
  309.             set_pev(iId, pev_viewmodel2, Deagle_Kinezetek[i]);
  310.         }
  311.     }
  312.     for(new i; i < sizeof(Usp_Kinezetek); i ++)
  313.     {
  314.         if(Kinezet[5][iId] == i && iFegyver == CSW_USP)
  315.         {
  316.             set_pev(iId, pev_viewmodel2, Usp_Kinezetek[i]);
  317.         }
  318.     }
  319.     for(new i; i < sizeof(Kes_Kinezetek); i ++)
  320.     {
  321.         if(Kinezet[6][iId] == i && iFegyver == CSW_KNIFE)
  322.         {
  323.             set_pev(iId, pev_viewmodel2, Kes_Kinezetek[i]);
  324.         }
  325.     }
  326. }
  327.  
  328. public raktar(iId)
  329. {
  330.     new Szoveg[512];
  331.  
  332.     new menu = menu_create("\dTeszt \wRaktár", "raktar_h");
  333.    
  334.     for(new i; i < sizeof(Kinezetek); i ++)
  335.     {
  336.         if(OsszesKinezet[i][iId] > 0)
  337.         {
  338.             new Sor[6]; num_to_str(i, Sor, 5);
  339.             formatex(Szoveg, charsmax(Szoveg), "\w%s \r(%d)", Kinezetek[i][0], OsszesKinezet[i][iId]);
  340.             menu_additem(menu, Szoveg, Sor);
  341.         }
  342.     }
  343.  
  344.     menu_display(iId, menu, 0);
  345. }
  346.  
  347. public raktar_h(iId, menu, iItem)
  348. {
  349.     if(iItem == MENU_EXIT)
  350.     {
  351.         menu_destroy(menu);
  352.         return;
  353.     }
  354.    
  355.     new data[9], szName[64];
  356.     new access, callback;
  357.     menu_item_getinfo(menu, iItem, access, data, charsmax(data), szName,charsmax(szName), callback);
  358.     new key = str_to_num(data);
  359.    
  360.     switch(key)
  361.     {
  362.         case 0: Kinezet[0][iId] = 1;
  363.         case 1: Kinezet[0][iId] = 2;
  364.         case 2: Kinezet[0][iId] = 3;
  365.         case 3: Kinezet[0][iId] = 4;
  366.         case 4: Kinezet[0][iId] = 5;
  367.         case 5: Kinezet[0][iId] = 6;
  368.         case 6: Kinezet[0][iId] = 7;
  369.         case 7: Kinezet[0][iId] = 8;
  370.         case 8: Kinezet[0][iId] = 9;
  371.         case 9: Kinezet[0][iId] = 10;
  372.         case 10: Kinezet[0][iId] = 11;
  373.         case 11: Kinezet[0][iId] = 12;
  374.         case 12: Kinezet[0][iId] = 13;
  375.  
  376.         case 13: Kinezet[1][iId] = 1;
  377.         case 14: Kinezet[1][iId] = 2;
  378.         case 15: Kinezet[1][iId] = 3;
  379.         case 16: Kinezet[1][iId] = 4;
  380.         case 17: Kinezet[1][iId] = 5;
  381.         case 18: Kinezet[1][iId] = 6;
  382.         case 19: Kinezet[1][iId] = 7;
  383.         case 20: Kinezet[1][iId] = 8;
  384.         case 21: Kinezet[1][iId] = 9;
  385.         case 22: Kinezet[1][iId] = 10;
  386.         case 23: Kinezet[1][iId] = 11;
  387.         case 24: Kinezet[1][iId] = 12;
  388.         case 25: Kinezet[1][iId] = 13;
  389.  
  390.         case 26: Kinezet[2][iId] = 1;
  391.         case 27: Kinezet[2][iId] = 2;
  392.         case 28: Kinezet[2][iId] = 3;
  393.         case 29: Kinezet[2][iId] = 4;
  394.         case 30: Kinezet[2][iId] = 5;
  395.         case 31: Kinezet[2][iId] = 6;
  396.         case 32: Kinezet[2][iId] = 7;
  397.         case 33: Kinezet[2][iId] = 8;
  398.         case 34: Kinezet[2][iId] = 9;
  399.         case 35: Kinezet[2][iId] = 10;
  400.         case 36: Kinezet[2][iId] = 11;
  401.         case 37: Kinezet[2][iId] = 12;
  402.         case 38: Kinezet[2][iId] = 13;
  403.        
  404.         case 39: Kinezet[3][iId] = 1;
  405.         case 40: Kinezet[3][iId] = 2;
  406.         case 41: Kinezet[3][iId] = 3;
  407.         case 42: Kinezet[3][iId] = 4;
  408.         case 43: Kinezet[3][iId] = 5;
  409.         case 44: Kinezet[3][iId] = 6;
  410.         case 45: Kinezet[3][iId] = 7;
  411.         case 46: Kinezet[3][iId] = 8;
  412.         case 47: Kinezet[3][iId] = 9;
  413.         case 48: Kinezet[3][iId] = 10;
  414.         case 49: Kinezet[3][iId] = 11;
  415.         case 50: Kinezet[3][iId] = 12;
  416.         case 51: Kinezet[3][iId] = 13;
  417.  
  418.         case 52: Kinezet[4][iId] = 1;
  419.         case 53: Kinezet[4][iId] = 2;
  420.         case 54: Kinezet[4][iId] = 3;
  421.         case 55: Kinezet[4][iId] = 4;
  422.         case 56: Kinezet[4][iId] = 5;
  423.         case 57: Kinezet[4][iId] = 6;
  424.         case 58: Kinezet[4][iId] = 7;
  425.         case 59: Kinezet[4][iId] = 8;
  426.         case 60: Kinezet[4][iId] = 9;
  427.         case 61: Kinezet[4][iId] = 10;
  428.         case 62: Kinezet[4][iId] = 11;
  429.         case 63: Kinezet[4][iId] = 12;
  430.         case 64: Kinezet[4][iId] = 13;
  431.         case 65: Kinezet[4][iId] = 14;
  432.  
  433.         case 66: Kinezet[5][iId] = 1;
  434.         case 67: Kinezet[5][iId] = 2;
  435.         case 68: Kinezet[5][iId] = 3;
  436.         case 69: Kinezet[5][iId] = 4;
  437.         case 70: Kinezet[5][iId] = 5;
  438.         case 71: Kinezet[5][iId] = 6;
  439.         case 72: Kinezet[5][iId] = 7;
  440.         case 73: Kinezet[5][iId] = 8;
  441.         case 74: Kinezet[5][iId] = 9;
  442.         case 75: Kinezet[5][iId] = 10;
  443.         case 76: Kinezet[5][iId] = 11;
  444.         case 77: Kinezet[5][iId] = 12;
  445.         case 78: Kinezet[5][iId] = 13;
  446.         case 79: Kinezet[5][iId] = 14;
  447.         case 80: Kinezet[5][iId] = 15;
  448.         case 81: Kinezet[5][iId] = 16;
  449.         case 82: Kinezet[5][iId] = 17;
  450.  
  451.         case 83: Kinezet[6][iId] = 1;
  452.         case 84: Kinezet[6][iId] = 2;
  453.         case 85: Kinezet[6][iId] = 3;
  454.         case 86: Kinezet[6][iId] = 4;
  455.         case 87: Kinezet[6][iId] = 5;
  456.         case 88: Kinezet[6][iId] = 6;
  457.         case 89: Kinezet[6][iId] = 7;
  458.         case 90: Kinezet[6][iId] = 8;
  459.         case 91: Kinezet[6][iId] = 9;
  460.         case 92: Kinezet[6][iId] = 10;
  461.         case 93: Kinezet[6][iId] = 11;
  462.         case 94: Kinezet[6][iId] = 12;
  463.         case 95: Kinezet[6][iId] = 13;
  464.         case 96: Kinezet[6][iId] = 14;
  465.         case 97: Kinezet[6][iId] = 15;
  466.         case 98: Kinezet[6][iId] = 16;
  467.     }
  468. }


Valamiért a Kés résznél el vannak csúszva a sorok, Kinezet[6][iId]-től vannak a Kések. (83-tól, 98-ig.)
Ha kiválasztom pld: az 5. Kést, akkor a 4.-et választja ki. Ha az 1. Kést, akkor ki sem választ semmit. Tehát egy Skin kiesik valamiért.

Ha van itt egy hozzáértő, és segítene, annak hálás volnék! Köszönöm!


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Skin eltolódás
HozzászólásElküldve: 2020.08.24. 11:25 
Offline
Jómunkásember
Avatar

Csatlakozott: 2016.02.10. 12:46
Hozzászólások: 429
Megköszönt másnak: 61 alkalommal
Megköszönték neki: 157 alkalommal
Üdv. Próbáld meg ezeket 0-tól indítani és nem 1-től.

  1. case 83: Kinezet[6][iId] = 1;


És így a többiből is vonj ki egyett.

  1. case 83: Kinezet[6][iId] = 0;
  2. case 84: Kinezet[6][iId] = 1;
  3. case 85: Kinezet[6][iId] = 2;
  4. case 86: Kinezet[6][iId] = 3;
  5. case 87: Kinezet[6][iId] = 4;
  6. case 88: Kinezet[6][iId] = 5;
  7. case 89: Kinezet[6][iId] = 6;
  8. case 90: Kinezet[6][iId] = 7;


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 2 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 25 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole