Guest User

Untitled

a guest
Apr 22nd, 2015
474
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 51.06 KB | None | 0 0
  1. void SFunction::bindGOFunctions(HSQUIRRELVM &vm)
  2. {
  3.     SQ_REGISTER_GLOBAL_FUNC(vm, "addMessage", SFunction::addMessage);
  4.     SQ_REGISTER_GLOBAL_FUNC(vm, "showChat", SFunction::showChat);
  5.     SQ_REGISTER_GLOBAL_FUNC(vm, "isChatShowed", SFunction::isChatShowed);
  6.     SQ_REGISTER_GLOBAL_FUNC(vm, "clearChat", SFunction::clearChat);
  7.     SQ_REGISTER_GLOBAL_FUNC(vm, "exitGame", SFunction::exit);
  8.     SQ_REGISTER_GLOBAL_FUNC(vm, "enableGameNpcs", SFunction::enableGameNpcs);
  9.     SQ_REGISTER_GLOBAL_FUNC(vm, "enableGameKeys", SFunction::enableGameKeys);
  10.     SQ_REGISTER_GLOBAL_FUNC(vm, "enableInterface", SFunction::enableInterface);
  11.     SQ_REGISTER_GLOBAL_FUNC(vm, "enableEq", SFunction::enableEq);
  12.     SQ_REGISTER_GLOBAL_FUNC(vm, "setTime", SFunction::setTime);
  13.     SQ_REGISTER_GLOBAL_FUNC(vm, "getTime", SFunction::getTime);
  14.     SQ_REGISTER_GLOBAL_FUNC(vm, "getPing", SFunction::getPing);
  15.     SQ_REGISTER_GLOBAL_FUNC(vm, "getTickCount", SFunction::getTickCount);
  16.     SQ_REGISTER_GLOBAL_FUNC(vm, "sendPacket", SFunction::sendPacket);
  17.     SQ_REGISTER_GLOBAL_FUNC(vm, "getDistance3D", SFunction::getDistance3D);
  18.     SQ_REGISTER_GLOBAL_FUNC(vm, "getDistance2D", SFunction::getDistance2D);
  19.     SQ_REGISTER_GLOBAL_FUNC(vm, "sscanf", SFunction::sscanf);
  20.     SQ_REGISTER_GLOBAL_FUNC(vm, "rgbToHex", SFunction::rgbToHex);
  21.     SQ_REGISTER_GLOBAL_FUNC(vm, "hexToRGB", SFunction::hexToRGB);
  22.     SQ_REGISTER_GLOBAL_FUNC(vm, "stringSplit", SFunction::stringSplit);
  23.     SQ_REGISTER_GLOBAL_FUNC(vm, "getResolution", SFunction::getResolution);
  24.     SQ_REGISTER_GLOBAL_FUNC(vm, "require", SFunction::require);
  25.     SQ_REGISTER_GLOBAL_FUNC(vm, "getName", SFunction::getName);
  26.     SQ_REGISTER_GLOBAL_FUNC(vm, "getHealth", SFunction::getHealth);
  27.     SQ_REGISTER_GLOBAL_FUNC(vm, "getMaxHealth", SFunction::getMaxHealth);
  28.     SQ_REGISTER_GLOBAL_FUNC(vm, "getMana", SFunction::getMana);
  29.     SQ_REGISTER_GLOBAL_FUNC(vm, "getMaxMana", SFunction::getMaxMana);
  30.     SQ_REGISTER_GLOBAL_FUNC(vm, "getDexterity", SFunction::getDexterity);
  31.     SQ_REGISTER_GLOBAL_FUNC(vm, "getStrength", SFunction::getStrength);
  32.     SQ_REGISTER_GLOBAL_FUNC(vm, "setHealth", SFunction::setHealth);
  33.     SQ_REGISTER_GLOBAL_FUNC(vm, "setMaxHealth", SFunction::setMaxHealth);
  34.     SQ_REGISTER_GLOBAL_FUNC(vm, "setMana", SFunction::setMana);
  35.     SQ_REGISTER_GLOBAL_FUNC(vm, "setMaxMana", SFunction::setMaxMana);
  36.     SQ_REGISTER_GLOBAL_FUNC(vm, "setDexterity", SFunction::setDexterity);
  37.     SQ_REGISTER_GLOBAL_FUNC(vm, "setStrength", SFunction::setStrength);
  38.     SQ_REGISTER_GLOBAL_FUNC(vm, "getPosition", SFunction::getPosition);
  39.     SQ_REGISTER_GLOBAL_FUNC(vm, "setPosition", SFunction::setPosition);
  40.     SQ_REGISTER_GLOBAL_FUNC(vm, "getAngle", SFunction::getAngle);
  41.     SQ_REGISTER_GLOBAL_FUNC(vm, "setAngle", SFunction::setAngle);
  42.     SQ_REGISTER_GLOBAL_FUNC(vm, "setLevel", SFunction::setLevel);
  43.     SQ_REGISTER_GLOBAL_FUNC(vm, "getLevel", SFunction::getLevel);
  44.     SQ_REGISTER_GLOBAL_FUNC(vm, "setExperience", SFunction::setExperience);
  45.     SQ_REGISTER_GLOBAL_FUNC(vm, "getExperience", SFunction::getExperience);
  46.     SQ_REGISTER_GLOBAL_FUNC(vm, "setNextLevelExperience", SFunction::setNextLevelExperience);
  47.     SQ_REGISTER_GLOBAL_FUNC(vm, "getNextLevelExperience", SFunction::getNextLevelExperience);
  48.     SQ_REGISTER_GLOBAL_FUNC(vm, "setLearnPoints", SFunction::setLearnPoints);
  49.     SQ_REGISTER_GLOBAL_FUNC(vm, "getLearnPoints", SFunction::getLearnPoints);
  50.     SQ_REGISTER_GLOBAL_FUNC(vm, "setSkillOpenLocks", SFunction::setSkillOpenLocks);
  51.     SQ_REGISTER_GLOBAL_FUNC(vm, "getSkillOpenLocksLevel", SFunction::getSkillOpenLocksLevel);
  52.     SQ_REGISTER_GLOBAL_FUNC(vm, "getSkillOpenLocksValue", SFunction::getSkillOpenLocksValue);
  53.     SQ_REGISTER_GLOBAL_FUNC(vm, "setSkillPickPocket", SFunction::setSkillPickPocket);
  54.     SQ_REGISTER_GLOBAL_FUNC(vm, "getSkillPickPocketLevel", SFunction::getSkillPickPocketLevel);
  55.     SQ_REGISTER_GLOBAL_FUNC(vm, "getSkillPickPocketValue", SFunction::getSkillPickPocketValue);
  56.     SQ_REGISTER_GLOBAL_FUNC(vm, "setMagicLevel", SFunction::setMagicLevel);
  57.     SQ_REGISTER_GLOBAL_FUNC(vm, "getMagicLevel", SFunction::getMagicLevel);
  58.     SQ_REGISTER_GLOBAL_FUNC(vm, "setAcrobatic", SFunction::setAcrobatic);
  59.     SQ_REGISTER_GLOBAL_FUNC(vm, "getAcrobatic", SFunction::getAcrobatic);
  60.     SQ_REGISTER_GLOBAL_FUNC(vm, "setSneak", SFunction::setSneak);
  61.     SQ_REGISTER_GLOBAL_FUNC(vm, "getSneak", SFunction::getSneak);
  62.     /*
  63.     SQ_REGISTER_GLOBAL_FUNC(vm, "setProtection", SFunction::setProtection);
  64.     SQ_REGISTER_GLOBAL_FUNC(vm, "getProtection", SFunction::getProtection);
  65.     */
  66.     SQ_REGISTER_GLOBAL_FUNC(vm, "completeHeal", SFunction::completeHeal);
  67.     SQ_REGISTER_GLOBAL_FUNC(vm, "isDead", SFunction::isDead);
  68.     SQ_REGISTER_GLOBAL_FUNC(vm, "isUnconscious", SFunction::isUnconscious);
  69.     SQ_REGISTER_GLOBAL_FUNC(vm, "setFreeze", SFunction::setFreeze);
  70.     SQ_REGISTER_GLOBAL_FUNC(vm, "isFrozen", SFunction::isFrozen);
  71.     SQ_REGISTER_GLOBAL_FUNC(vm, "getItemName", SFunction::getItemName);
  72.     SQ_REGISTER_GLOBAL_FUNC(vm, "getItemDescription", SFunction::getItemDescription);
  73.     SQ_REGISTER_GLOBAL_FUNC(vm, "getItemValue", SFunction::getItemValue);
  74.     SQ_REGISTER_GLOBAL_FUNC(vm, "giveItem", SFunction::giveItem);
  75.     SQ_REGISTER_GLOBAL_FUNC(vm, "removeItem", SFunction::removeItem);
  76.     SQ_REGISTER_GLOBAL_FUNC(vm, "equipArmor", SFunction::equipArmor);
  77.     SQ_REGISTER_GLOBAL_FUNC(vm, "unequipArmor", SFunction::unequipArmor);
  78.     SQ_REGISTER_GLOBAL_FUNC(vm, "equipMeleeWeapon", SFunction::equipMeleeWeapon);
  79.     SQ_REGISTER_GLOBAL_FUNC(vm, "unequipMeleeWeapon", SFunction::unequipMeleeWeapon);
  80.     SQ_REGISTER_GLOBAL_FUNC(vm, "equipRangedWeapon", SFunction::equipRangedWeapon);
  81.     SQ_REGISTER_GLOBAL_FUNC(vm, "unequipRangedWeapon", SFunction::unequipRangedWeapon);
  82.     SQ_REGISTER_GLOBAL_FUNC(vm, "getArmorInstance", SFunction::getArmorInstance);
  83.     SQ_REGISTER_GLOBAL_FUNC(vm, "getMeleeInstance", SFunction::getMeleeInstance);
  84.     SQ_REGISTER_GLOBAL_FUNC(vm, "getRangedInstance", SFunction::getRangedInstance);
  85.     SQ_REGISTER_GLOBAL_FUNC(vm, "getWeaponMode", SFunction::getWeaponMode);
  86.     SQ_REGISTER_GLOBAL_FUNC(vm, "setWeaponMode", SFunction::setWeaponMode);
  87.     SQ_REGISTER_GLOBAL_FUNC(vm, "clearInventory", SFunction::clearInventory);
  88.     SQ_REGISTER_GLOBAL_FUNC(vm, "openInventory", SFunction::openInventory);
  89.     SQ_REGISTER_GLOBAL_FUNC(vm, "closeInventory", SFunction::closeInventory);
  90.     SQ_REGISTER_GLOBAL_FUNC(vm, "playAnimation", SFunction::playAnimation);
  91.     SQ_REGISTER_GLOBAL_FUNC(vm, "createDraw", SFunction::createDraw);
  92.     SQ_REGISTER_GLOBAL_FUNC(vm, "destroyDraw", SFunction::destroyDraw);
  93.     SQ_REGISTER_GLOBAL_FUNC(vm, "setDrawVisible", SFunction::setDrawVisible);
  94.     SQ_REGISTER_GLOBAL_FUNC(vm, "isDrawVisible", SFunction::isDrawVisible);
  95.     SQ_REGISTER_GLOBAL_FUNC(vm, "setDrawPosition", SFunction::setDrawPosition);
  96.     SQ_REGISTER_GLOBAL_FUNC(vm, "getDrawPosition", SFunction::getDrawPosition);
  97.     SQ_REGISTER_GLOBAL_FUNC(vm, "setDrawText", SFunction::setDrawText);
  98.     SQ_REGISTER_GLOBAL_FUNC(vm, "setDrawFont", SFunction::setDrawFont);
  99.     SQ_REGISTER_GLOBAL_FUNC(vm, "setDrawColor", SFunction::setDrawColor);
  100.     SQ_REGISTER_GLOBAL_FUNC(vm, "createTexture", SFunction::createTexture);
  101.     SQ_REGISTER_GLOBAL_FUNC(vm, "destroyTexture", SFunction::destroyTexture);
  102.     SQ_REGISTER_GLOBAL_FUNC(vm, "setTexture", SFunction::setTexture);
  103.     SQ_REGISTER_GLOBAL_FUNC(vm, "getTexture", SFunction::getTexture);
  104.     SQ_REGISTER_GLOBAL_FUNC(vm, "setTexturePosition", SFunction::setTexturePosition);
  105.     SQ_REGISTER_GLOBAL_FUNC(vm, "getTexturePosition", SFunction::getTexturePosition);
  106.     SQ_REGISTER_GLOBAL_FUNC(vm, "setTextureSize", SFunction::setTextureSize);
  107.     SQ_REGISTER_GLOBAL_FUNC(vm, "getTextureSize", SFunction::getTextureSize);
  108.     SQ_REGISTER_GLOBAL_FUNC(vm, "setTextureVisible", SFunction::setTextureVisible);
  109.     SQ_REGISTER_GLOBAL_FUNC(vm, "isTextureVisible", SFunction::isTextureVisible);
  110.     SQ_REGISTER_GLOBAL_FUNC(vm, "setCursorVisible", SFunction::setCursorVisible);
  111.     SQ_REGISTER_GLOBAL_FUNC(vm, "isCursorVisible", SFunction::isCursorVisible);
  112.     SQ_REGISTER_GLOBAL_FUNC(vm, "getCursorPosition", SFunction::getCursorPos);
  113.     SQ_REGISTER_GLOBAL_FUNC(vm, "setCursorPosition", SFunction::setCursorPos);
  114.     SQ_REGISTER_GLOBAL_FUNC(vm, "getCursorSensitivity", SFunction::getCursorSensitivity);
  115.     SQ_REGISTER_GLOBAL_FUNC(vm, "setCursorSensitivity", SFunction::setCursorSensitivity);
  116.     SQ_REGISTER_GLOBAL_FUNC(vm, "setCursorTexture", SFunction::setCursorTexture);
  117.     SQ_REGISTER_GLOBAL_FUNC(vm, "getCursorTexture", SFunction::getCursorTexture);
  118.     SQ_REGISTER_GLOBAL_FUNC(vm, "isClicked", SFunction::isClicked);
  119.     SQ_REGISTER_GLOBAL_FUNC(vm, "md5File", SFunction::md5File);
  120.     SQ_REGISTER_GLOBAL_FUNC(vm, "md5", SFunction::md5);
  121.     SQ_REGISTER_GLOBAL_FUNC(vm, "sha1", SFunction::sha1);
  122.     SQ_REGISTER_GLOBAL_FUNC(vm, "sha256", SFunction::sha256);
  123.     SQ_REGISTER_GLOBAL_FUNC(vm, "sha384", SFunction::sha384);
  124.     SQ_REGISTER_GLOBAL_FUNC(vm, "sha512", SFunction::sha512);
  125.     SQ_REGISTER_GLOBAL_FUNC(vm, "setTimer", SFunction::setTimer);
  126.     SQ_REGISTER_GLOBAL_FUNC(vm, "killTimer", SFunction::killTimer);
  127.     SQ_REGISTER_GLOBAL_FUNC(vm, "setTimerInterval", SFunction::setTimerInterval);
  128.     SQ_REGISTER_GLOBAL_FUNC(vm, "setTimerRepeat", SFunction::setTimerRepeat);
  129.     SQ_REGISTER_GLOBAL_FUNC(vm, "setTimerData", SFunction::setTimerData);
  130.     SQ_REGISTER_GLOBAL_FUNC(vm, "setCameraBeforeHero", SFunction::setCameraBeforeHero);
  131.     SQ_REGISTER_GLOBAL_FUNC(vm, "setDefaultCamera", SFunction::setDefaultCamera);
  132.     SQ_REGISTER_GLOBAL_FUNC(vm, "setWorld", SFunction::setWorld);
  133.     SQ_REGISTER_GLOBAL_FUNC(vm, "getWorld", SFunction::getWorld);
  134.     SQ_REGISTER_GLOBAL_FUNC(vm, "setSavingEnabled", SFunction::setSavingEnabled);
  135.     SQ_REGISTER_GLOBAL_FUNC(vm, "isSavingEnabled", SFunction::isSavingEnabled);
  136.     SQ_REGISTER_GLOBAL_FUNC(vm, "getInstance", SFunction::getInstance);
  137.     SQ_REGISTER_GLOBAL_FUNC(vm, "setInstance", SFunction::setInstance);
  138.     SQ_REGISTER_GLOBAL_FUNC(vm, "checkPrograms", SFunction::checkPrograms);
  139.     SQ_REGISTER_GLOBAL_FUNC(vm, "createVob", SFunction::createVob);
  140.     SQ_REGISTER_GLOBAL_FUNC(vm, "destroyVob", SFunction::destroyVob);
  141.     SQ_REGISTER_GLOBAL_FUNC(vm, "getVobRotation", SFunction::getVobRotation);
  142.     SQ_REGISTER_GLOBAL_FUNC(vm, "setVobRotation", SFunction::setVobRotation);
  143.     SQ_REGISTER_GLOBAL_FUNC(vm, "getVobPosition", SFunction::getVobPosition);
  144.     SQ_REGISTER_GLOBAL_FUNC(vm, "setVobPosition", SFunction::setVobPosition);
  145.     SQ_REGISTER_GLOBAL_FUNC(vm, "setCameraBehindVob", SFunction::setCameraBehindVob);
  146.     SQ_REGISTER_GLOBAL_FUNC(vm, "setVobCollision", SFunction::setVobCollision);
  147.     SQ_REGISTER_GLOBAL_FUNC(vm, "setWeaponSkill", SFunction::setWeaponSkill);
  148.     SQ_REGISTER_GLOBAL_FUNC(vm, "getWeaponSkill", SFunction::getWeaponSkill);
  149.     SQ_REGISTER_GLOBAL_FUNC(vm, "getAnimationID", SFunction::getAnimationID);
  150.     SQ_REGISTER_GLOBAL_FUNC(vm, "getAnimationName", SFunction::getAnimationName);
  151.     SQ_REGISTER_GLOBAL_FUNC(vm, "getAdditionalVisual", SFunction::getAdditionalVisual);
  152.     SQ_REGISTER_GLOBAL_FUNC(vm, "setAdditionalVisual", SFunction::setAdditionalVisual);
  153.     SQ_REGISTER_GLOBAL_FUNC(vm, "sendVisual", SFunction::sendVisual);
  154.     SQ_REGISTER_GLOBAL_FUNC(vm, "hasItem", SFunction::hasItem);
  155.     SQ_REGISTER_GLOBAL_FUNC(vm, "getEq", SFunction::getEq);
  156.     SQ_REGISTER_GLOBAL_FUNC(vm, "setOverlay", SFunction::setOverlay);
  157. };
  158.  
  159. SQInteger SFunction::addMessage(HSQUIRRELVM vm)
  160. {
  161.     SQ_CHECK_PARAM_COUNT(vm, 4);
  162.     SQ_CHECK_PARAM_INT(vm, r, 0);
  163.     SQ_CHECK_PARAM_INT(vm, g, 1);
  164.     SQ_CHECK_PARAM_INT(vm, b, 2);
  165.     SQ_CHECK_PARAM_STRING(vm, message, 3);
  166.    
  167.     core.GetChat()->AddLine(RakString(message),zCOLOR(r,g,b,255));
  168.  
  169.     return 0;
  170. };
  171.  
  172. SQInteger SFunction::showChat(HSQUIRRELVM vm)
  173. {
  174.     SQ_CHECK_PARAM_COUNT(vm, 1);
  175.     SQ_CHECK_PARAM_BOOL(vm, enable, 0);
  176.  
  177.     core.GetChat()->Show(enable);
  178.  
  179.     return 0;
  180. }
  181.  
  182. SQInteger SFunction::isChatShowed(HSQUIRRELVM vm)
  183. {
  184.     sq_pushbool(vm, core.GetChat()->IsShowing());
  185.  
  186.     return 1;
  187. }
  188.  
  189. SQInteger SFunction::exit(HSQUIRRELVM vm)
  190. {
  191.     core.GetNetwork()->Disconnect();
  192.     CGameManager::GetGameManager()->ExitGame();
  193.     ExitProcess(0);
  194.  
  195.     return 0;
  196. };
  197.  
  198. SQInteger SFunction::enableGameNpcs(HSQUIRRELVM vm)
  199. {
  200.     SQ_CHECK_PARAM_COUNT(vm, 1);
  201.     SQ_CHECK_PARAM_BOOL(vm, enable, 0);
  202.  
  203.     oCSpawnManager* spawnManager = oCGame::GetGame()->GetSpawnManager();
  204.     if (spawnManager)
  205.     {
  206.         spawnManager->SetSpawningEnabled(enable);
  207.     }
  208.     //Chujowa metoda, nie polecam, gdy diego nie chce zniknac
  209.     if (enable == 0)
  210.     {
  211.         oCNpc* focus = oCNpc::GetHero()->GetFocusNpc();
  212.         if (focus)
  213.             focus->DestroyNpc();
  214.         else if ((focus = oCNpc::GetHero()->GetNextEnemy()))
  215.             focus->DestroyNpc();
  216.     }
  217.  
  218.     return 0;
  219. };
  220.  
  221. SQInteger SFunction::enableGameKeys(HSQUIRRELVM vm)
  222. {
  223.     SQ_CHECK_PARAM_COUNT(vm, 1);
  224.     SQ_CHECK_PARAM_BOOL(vm, enable, 0);
  225.  
  226.     scr.GetScriptVars()->SetKeyEnabled(enable);
  227.  
  228.     return 0;
  229. };
  230.  
  231. SQInteger SFunction::enableInterface(HSQUIRRELVM vm)
  232. {
  233.     SQ_CHECK_PARAM_COUNT(vm, 1);
  234.     SQ_CHECK_PARAM_BOOL(vm, enable, 0);
  235.  
  236.     scr.GetScriptVars()->SetInterfaceEnabled(enable);
  237.  
  238.     return 0;
  239. };
  240.  
  241. SQInteger SFunction::enableEq(HSQUIRRELVM vm)
  242. {
  243.     SQ_CHECK_PARAM_COUNT(vm, 1);
  244.     SQ_CHECK_PARAM_BOOL(vm, enable, 0);
  245.  
  246.     scr.GetScriptVars()->SetEqEnabled(enable);
  247.  
  248.     return 0;
  249. };
  250.  
  251. SQInteger SFunction::setTime(HSQUIRRELVM vm)
  252. {
  253.     SQ_CHECK_PARAM_COUNT(vm, 2);
  254.     SQ_CHECK_PARAM_INT(vm, hour, 0);
  255.     SQ_CHECK_PARAM_INT(vm, minute, 1);
  256.  
  257.     oCGame::GetGame()->SetTime(0, hour, minute);
  258.  
  259.     return 0;
  260. };
  261.  
  262. SQInteger SFunction::getTime(HSQUIRRELVM vm)
  263. {
  264.     int day, hour, minute;
  265.     oCGame::GetGame()->GetTime(day, hour, minute);
  266.  
  267.     sq_newtable(vm);
  268.     SQ_TABLE_SET_INT(vm, "hour", hour);
  269.     SQ_TABLE_SET_INT(vm, "min", minute);
  270.  
  271.     return 1;
  272. };
  273.  
  274. SQInteger SFunction::getPing(HSQUIRRELVM vm)
  275. {
  276.     sq_pushinteger(vm, core.GetNetwork()->GetPeer()->GetLastPing(core.GetNetwork()->GetServerAddress()));
  277.  
  278.     return 1;
  279. };
  280.  
  281. SQInteger SFunction::getTickCount(HSQUIRRELVM vm)
  282. {
  283.     sq_pushinteger(vm, (int)::GetTickCount());
  284.  
  285.     return 1;
  286. };
  287.  
  288. SQInteger SFunction::sendPacket(HSQUIRRELVM vm)
  289. {
  290.     SQ_CHECK_PARAM_COUNT(vm, 2);
  291.     SQ_CHECK_PARAM_INT(vm, priority, 0);
  292.     SQ_CHECK_PARAM_STRING(vm, data, 1);
  293.  
  294.     CNetwork* net = core.GetNetwork();
  295.     if( net->IsConnected() == true )
  296.     {
  297.         BitStream s;
  298.         s.Write((MessageID)GO_SCRIPT);
  299.         s.Write((MessageID)SCRIPT_PACKET);
  300.         s.Write(RakString(data));
  301.  
  302.         switch (priority)
  303.         {
  304.         case 0:
  305.             net->GetPeer()->Send(&s, LOW_PRIORITY, UNRELIABLE, 0, net->GetServerAddress(), false);
  306.             break;
  307.  
  308.         case 1:
  309.             net->GetPeer()->Send(&s, LOW_PRIORITY, RELIABLE, 0, net->GetServerAddress(), false);
  310.             break;
  311.  
  312.         case 2:
  313.             net->GetPeer()->Send(&s, LOW_PRIORITY, RELIABLE_ORDERED, 0, net->GetServerAddress(), false);
  314.             break;
  315.         }
  316.        
  317.     }
  318.  
  319.     return 0;
  320. };
  321.  
  322. SQInteger SFunction::getDistance3D(HSQUIRRELVM vm)
  323. {
  324.     SQ_CHECK_PARAM_COUNT(vm, 6);
  325.     SQ_CHECK_PARAM_FLOAT(vm, x, 0);
  326.     SQ_CHECK_PARAM_FLOAT(vm, y, 1);
  327.     SQ_CHECK_PARAM_FLOAT(vm, z, 2);
  328.     SQ_CHECK_PARAM_FLOAT(vm, x2, 3);
  329.     SQ_CHECK_PARAM_FLOAT(vm, y2, 4);
  330.     SQ_CHECK_PARAM_FLOAT(vm, z2, 5);
  331.  
  332.     sq_pushfloat(vm, goMath::GetDistance3D(x, y, z, x2, y2, z2));
  333.  
  334.     return 1;
  335. };
  336.  
  337. SQInteger SFunction::getDistance2D(HSQUIRRELVM vm)
  338. {
  339.     SQ_CHECK_PARAM_COUNT(vm, 4);
  340.     SQ_CHECK_PARAM_FLOAT(vm, a, 0);
  341.     SQ_CHECK_PARAM_FLOAT(vm, b, 1);
  342.     SQ_CHECK_PARAM_FLOAT(vm, c, 2);
  343.     SQ_CHECK_PARAM_FLOAT(vm, d, 3);
  344.  
  345.     sq_pushfloat(vm, goMath::GetDistance2D(a, b, c, d));
  346.  
  347.     return 1;
  348. };
  349.  
  350. SQInteger SFunction::sscanf(HSQUIRRELVM vm)
  351. {
  352.     SQ_CHECK_PARAM_COUNT(vm, 2);
  353.     SQ_CHECK_PARAM_STRING(vm, params, 0);
  354.     SQ_CHECK_PARAM_STRING(vm, command, 1);
  355.  
  356.     std::vector<std::string> elements;
  357.     if (utility::sscanf(params, command, elements))
  358.     {
  359.         sq_newarray(vm, 0);
  360.  
  361.         for (int i = 0; i < strlen(params); ++i)
  362.         {
  363.             switch (params[i])
  364.             {
  365.             case 'd':
  366.                 SQ_ARRAY_INT(vm, atoi(elements[i].c_str()));
  367.                 break;
  368.  
  369.             case 'f':
  370.                 SQ_ARRAY_FLOAT(vm, static_cast<float>(atof(elements[i].c_str())));
  371.                 break;
  372.  
  373.             case 's':
  374.                 SQ_ARRAY_STRING(vm, elements[i].c_str());
  375.                 break;
  376.             }
  377.         }
  378.     }
  379.     else
  380.         sq_pushbool(vm, false);
  381.  
  382.     return 1;
  383. }
  384.  
  385. SQInteger SFunction::rgbToHex(HSQUIRRELVM vm)
  386. {
  387.     SQ_CHECK_PARAM_COUNT(vm, 3);
  388.     SQ_CHECK_PARAM_INT(vm, r, 0);
  389.     SQ_CHECK_PARAM_INT(vm, g, 1);
  390.     SQ_CHECK_PARAM_INT(vm, b, 2);
  391.  
  392.     std::string colorHex = utility::RGBtoHex(r, g, b);
  393.  
  394.     sq_pushstring(vm, colorHex.c_str(), -1);
  395.  
  396.     return 1;
  397. }
  398.  
  399. SQInteger SFunction::hexToRGB(HSQUIRRELVM vm)
  400. {
  401.     SQ_CHECK_PARAM_COUNT(vm, 1);
  402.     SQ_CHECK_PARAM_STRING(vm, hexColor, 0);
  403.  
  404.     int r, g, b;
  405.     utility::HextoRGB(hexColor, &r, &g, &b);
  406.  
  407.     sq_newtable(vm);
  408.     SQ_TABLE_SET_INT(vm, "r", r);
  409.     SQ_TABLE_SET_INT(vm, "g", g);
  410.     SQ_TABLE_SET_INT(vm, "b", b);
  411.  
  412.     return 1;
  413. }
  414.  
  415. SQInteger SFunction::stringSplit(HSQUIRRELVM vm)
  416. {
  417.     SQ_CHECK_PARAM_COUNT(vm, 2);
  418.     SQ_CHECK_PARAM_STRING(vm, text, 0);
  419.     SQ_CHECK_PARAM_STRING(vm, delim, 1);
  420.  
  421.     std::vector<std::string> elements;
  422.     utility::splitString(text, delim, elements);
  423.  
  424.     sq_newarray(vm, 0);
  425.  
  426.     for (int i = 0; i < elements.size(); ++i)
  427.         SQ_ARRAY_STRING(vm, elements[i].c_str());
  428.  
  429.     return 1;
  430. }
  431.  
  432. SQInteger SFunction::getResolution(HSQUIRRELVM vm)
  433. {
  434.     RECT rectResolution;
  435.     GetClientRect(CGothicWindow::GetGothicWindowHandle(), &rectResolution);
  436.  
  437.     sq_newtable(vm);
  438.     SQ_TABLE_SET_INT(vm, "width", rectResolution.right);
  439.     SQ_TABLE_SET_INT(vm, "height", rectResolution.bottom);
  440.  
  441.     return 1;
  442. }
  443.  
  444. SQInteger SFunction::require(HSQUIRRELVM vm)
  445. {
  446.     SQ_CHECK_PARAM_COUNT(vm, 1);
  447.     SQ_CHECK_PARAM_STRING(vm, filename, 0);
  448.  
  449.     static std::vector<std::string> indludedFiles;
  450.  
  451.     for (int i = 0; i < indludedFiles.size(); ++i)
  452.     {
  453.         if (indludedFiles[i] == filename)
  454.             return 0;
  455.     }
  456.  
  457.     if (SQ_SUCCEEDED(sqstd_dofile(vm, RakString("Multiplayer/Script/%s", filename).C_String(), SQFalse, SQTrue)))
  458.     {
  459.         indludedFiles.push_back(filename);
  460.     }
  461.  
  462.     return 0;
  463. };
  464.  
  465. SQInteger SFunction::getName(HSQUIRRELVM vm)
  466. {
  467.     sq_pushstring(vm, core.GetConfig()->GetPlayerName().C_String(), -1);
  468.     return 1;
  469. };
  470.  
  471. SQInteger SFunction::getHealth(HSQUIRRELVM vm)
  472. {
  473.     sq_pushinteger(vm, oCNpc::GetHero()->GetAttribute(NPC_ATR_HITPOINTS));
  474.     return 1;
  475. };
  476.  
  477. SQInteger SFunction::getMaxHealth(HSQUIRRELVM vm)
  478. {
  479.     sq_pushinteger(vm, oCNpc::GetHero()->GetAttribute(NPC_ATR_HITPOINTS_MAX));
  480.     return 1;
  481. };
  482.  
  483. SQInteger SFunction::getMana(HSQUIRRELVM vm)
  484. {
  485.     sq_pushinteger(vm, oCNpc::GetHero()->GetAttribute(NPC_ATR_MANA));
  486.     return 1;
  487. };
  488.  
  489. SQInteger SFunction::getMaxMana(HSQUIRRELVM vm)
  490. {
  491.     sq_pushinteger(vm, oCNpc::GetHero()->GetAttribute(NPC_ATR_MANA_MAX));
  492.     return 1;
  493. };
  494.  
  495. SQInteger SFunction::getStrength(HSQUIRRELVM vm)
  496. {
  497.     sq_pushinteger(vm, oCNpc::GetHero()->GetAttribute(NPC_ATR_STRENGTH));
  498.     return 1;
  499. };
  500.  
  501. SQInteger SFunction::getDexterity(HSQUIRRELVM vm)
  502. {
  503.     sq_pushinteger(vm, oCNpc::GetHero()->GetAttribute(NPC_ATR_DEXTERITY));
  504.     return 1;
  505. };
  506.  
  507. SQInteger SFunction::setHealth(HSQUIRRELVM vm)
  508. {
  509.     SQ_CHECK_PARAM_COUNT(vm, 1);
  510.     SQ_CHECK_PARAM_INT(vm, health, 0);
  511.  
  512.     oCNpc::GetHero()->SetAttribute(NPC_ATR_HITPOINTS, health);
  513.  
  514.     return 0;
  515. };
  516.  
  517. SQInteger SFunction::setMaxHealth(HSQUIRRELVM vm)
  518. {
  519.     SQ_CHECK_PARAM_COUNT(vm, 1);
  520.     SQ_CHECK_PARAM_INT(vm, maxhealth, 0);
  521.  
  522.     oCNpc::GetHero()->SetAttribute(NPC_ATR_HITPOINTS_MAX, maxhealth);
  523.  
  524.     return 0;
  525. };
  526.  
  527. SQInteger SFunction::setMana(HSQUIRRELVM vm)
  528. {
  529.     SQ_CHECK_PARAM_COUNT(vm, 1);
  530.     SQ_CHECK_PARAM_INT(vm, mana, 0);
  531.  
  532.     oCNpc::GetHero()->SetAttribute(NPC_ATR_MANA, mana);
  533.  
  534.     return 0;
  535. };
  536.  
  537. SQInteger SFunction::setMaxMana(HSQUIRRELVM vm)
  538. {
  539.     SQ_CHECK_PARAM_COUNT(vm, 1);
  540.     SQ_CHECK_PARAM_INT(vm, maxmana, 0);
  541.  
  542.     oCNpc::GetHero()->SetAttribute(NPC_ATR_MANA_MAX, maxmana);
  543.  
  544.     return 0;
  545. };
  546.  
  547. SQInteger SFunction::setStrength(HSQUIRRELVM vm)
  548. {
  549.     SQ_CHECK_PARAM_COUNT(vm, 1);
  550.     SQ_CHECK_PARAM_INT(vm, strength, 0);
  551.  
  552.     oCNpc::GetHero()->SetAttribute(NPC_ATR_STRENGTH, strength);
  553.  
  554.     return 0;
  555. };
  556.  
  557. SQInteger SFunction::setDexterity(HSQUIRRELVM vm)
  558. {
  559.     SQ_CHECK_PARAM_COUNT(vm, 1);
  560.     SQ_CHECK_PARAM_INT(vm, dexterity, 0);
  561.  
  562.     oCNpc::GetHero()->SetAttribute(NPC_ATR_DEXTERITY, dexterity);
  563.  
  564.     return 0;
  565. };
  566.  
  567. SQInteger SFunction::getPosition(HSQUIRRELVM vm)
  568. {
  569.     zVEC3 pos = oCNpc::GetHero()->GetPosition();
  570.    
  571.     sq_newtable(vm);
  572.     SQ_TABLE_SET_FLOAT(vm, "x", pos.x);
  573.     SQ_TABLE_SET_FLOAT(vm, "y", pos.y);
  574.     SQ_TABLE_SET_FLOAT(vm, "z", pos.z);
  575.  
  576.     return 1;
  577. };
  578.  
  579. SQInteger SFunction::setPosition(HSQUIRRELVM vm)
  580. {
  581.     SQ_CHECK_PARAM_COUNT(vm, 3);
  582.     SQ_CHECK_PARAM_FLOAT(vm, x, 0);
  583.     SQ_CHECK_PARAM_FLOAT(vm, y, 1);
  584.     SQ_CHECK_PARAM_FLOAT(vm, z, 2);
  585.  
  586.     // Lag fix
  587.     CLocalPlayer *player = playerManager.GetLocalPlayer();
  588.     player->pos.x = x; player->pos.y = y; player->pos.z = z;
  589.    
  590.     oCNpc::GetHero()->SetPosition(x, y, z);
  591.  
  592.     return 0;
  593. };
  594.  
  595. SQInteger SFunction::getAngle(HSQUIRRELVM vm)
  596. {
  597.     sq_pushfloat(vm, oCNpc::GetHero()->GetHeading());
  598.     return 1;
  599. };
  600.  
  601. SQInteger SFunction::setAngle(HSQUIRRELVM vm)
  602. {
  603.     SQ_CHECK_PARAM_COUNT(vm, 1);
  604.     SQ_CHECK_PARAM_FLOAT(vm, angle, 0);
  605.  
  606.     oCNpc::GetHero()->SetHeading(angle);
  607.  
  608.     return 0;
  609. };
  610.  
  611. SQInteger SFunction::setLevel(HSQUIRRELVM vm)
  612. {
  613.     SQ_CHECK_PARAM_COUNT(vm, 1);
  614.     SQ_CHECK_PARAM_INT(vm, level, 0);
  615.  
  616.     oCNpc::GetHero()->SetLevel(level >= 0 ? level : 0);
  617.  
  618.     return 0;
  619. }
  620.  
  621. SQInteger SFunction::getLevel(HSQUIRRELVM vm)
  622. {
  623.     sq_pushinteger(vm, oCNpc::GetHero()->GetLevel());
  624.     return 1;
  625. }
  626.  
  627. SQInteger SFunction::setExperience(HSQUIRRELVM vm)
  628. {
  629.     SQ_CHECK_PARAM_COUNT(vm, 1);
  630.     SQ_CHECK_PARAM_INT(vm, experience, 0);
  631.  
  632.     oCNpc::GetHero()->SetExperience(experience >= 0 ? experience : 0);
  633.  
  634.     return 0;
  635. }
  636.  
  637. SQInteger SFunction::getExperience(HSQUIRRELVM vm)
  638. {
  639.     sq_pushinteger(vm, oCNpc::GetHero()->GetExperience());
  640.     return 1;
  641. }
  642.  
  643. SQInteger SFunction::setNextLevelExperience(HSQUIRRELVM vm)
  644. {
  645.     SQ_CHECK_PARAM_COUNT(vm, 1);
  646.     SQ_CHECK_PARAM_INT(vm, experience, 0);
  647.  
  648.     oCNpc::GetHero()->SetExperienceNextLevel(experience >= 0 ? experience : 0);
  649.  
  650.     return 0;
  651. }
  652.  
  653. SQInteger SFunction::getNextLevelExperience(HSQUIRRELVM vm)
  654. {
  655.     sq_pushinteger(vm, oCNpc::GetHero()->GetExperienceNextLevel());
  656.     return 1;
  657. }
  658.  
  659. SQInteger SFunction::setLearnPoints(HSQUIRRELVM vm)
  660. {
  661.     SQ_CHECK_PARAM_COUNT(vm, 1);
  662.     SQ_CHECK_PARAM_INT(vm, lp, 0);
  663.  
  664.     oCNpc::GetHero()->SetLearnPoints(lp >= 0 ? lp : 0);
  665.  
  666.     return 0;
  667. }
  668.  
  669. SQInteger SFunction::getLearnPoints(HSQUIRRELVM vm)
  670. {
  671.     sq_pushinteger(vm, oCNpc::GetHero()->GetLearnPoints());
  672.     return 1;
  673. }
  674.  
  675. SQInteger SFunction::setSkillOpenLocks(HSQUIRRELVM vm)
  676. {
  677.     SQ_CHECK_PARAM_COUNT(vm, 2);
  678.     SQ_CHECK_PARAM_INT(vm, skill, 0);
  679.     SQ_CHECK_PARAM_INT(vm, value, 1);
  680.  
  681.     oCNpc::GetHero()->SetOpenLock(skill, value);
  682.  
  683.     return 0;
  684. }
  685.  
  686. SQInteger SFunction::getSkillOpenLocksLevel(HSQUIRRELVM vm)
  687. {
  688.     sq_pushinteger(vm, oCNpc::GetHero()->GetTalentSkill(NPC_TALENT_PICKLOCK));
  689.     return 1;
  690. }
  691.  
  692. SQInteger SFunction::getSkillOpenLocksValue(HSQUIRRELVM vm)
  693. {
  694.     sq_pushinteger(vm, oCNpc::GetHero()->GetTalentValue(NPC_TALENT_PICKLOCK));
  695.     return 1;
  696. }
  697.  
  698. SQInteger SFunction::setSkillPickPocket(HSQUIRRELVM vm)
  699. {
  700.     SQ_CHECK_PARAM_COUNT(vm, 2);
  701.     SQ_CHECK_PARAM_INT(vm, skill, 0);
  702.     SQ_CHECK_PARAM_INT(vm, value, 1);
  703.  
  704.     oCNpc::GetHero()->SetPickPocket(skill, value);
  705.  
  706.     return 0;
  707. }
  708.  
  709. SQInteger SFunction::getSkillPickPocketLevel(HSQUIRRELVM vm)
  710. {
  711.     sq_pushinteger(vm, oCNpc::GetHero()->GetTalentSkill(NPC_TALENT_PICKPOCKET));
  712.     return 1;
  713. }
  714.  
  715. SQInteger SFunction::getSkillPickPocketValue(HSQUIRRELVM vm)
  716. {
  717.     sq_pushinteger(vm, oCNpc::GetHero()->GetTalentValue(NPC_TALENT_PICKPOCKET));
  718.     return 1;
  719. }
  720.  
  721. SQInteger SFunction::setMagicLevel(HSQUIRRELVM vm)
  722. {
  723.     SQ_CHECK_PARAM_COUNT(vm, 1);
  724.     SQ_CHECK_PARAM_INT(vm, magic, 0);
  725.  
  726.     oCNpc::GetHero()->SetMagicLvl(magic >= 0 ? magic : 0);
  727.  
  728.     return 0;
  729. }
  730.  
  731. SQInteger SFunction::getMagicLevel(HSQUIRRELVM vm)
  732. {
  733.     sq_pushinteger(vm, oCNpc::GetHero()->GetMagicLvl());
  734.     return 1;
  735. }
  736.  
  737. SQInteger SFunction::setAcrobatic(HSQUIRRELVM vm)
  738. {
  739.     SQ_CHECK_PARAM_COUNT(vm, 1);
  740.     SQ_CHECK_PARAM_BOOL(vm, acrobatic, 0);
  741.  
  742.     oCNpc::GetHero()->SetAcrobatic(acrobatic);
  743.  
  744.     return 0;
  745. }
  746.  
  747. SQInteger SFunction::getAcrobatic(HSQUIRRELVM vm)
  748. {
  749.     sq_pushbool(vm, oCNpc::GetHero()->GetAcrobatic());
  750.     return 1;
  751. }
  752.  
  753. SQInteger SFunction::setSneak(HSQUIRRELVM vm)
  754. {
  755.     SQ_CHECK_PARAM_COUNT(vm, 1);
  756.     SQ_CHECK_PARAM_BOOL(vm, sneak, 0);
  757.  
  758.     oCNpc::GetHero()->SetSneak(sneak);
  759.  
  760.     return 0;
  761. }
  762.  
  763. SQInteger SFunction::getSneak(HSQUIRRELVM vm)
  764. {
  765.     sq_pushbool(vm, oCNpc::GetHero()->GetSneak());
  766.     return 1;
  767. }
  768. /*
  769. SQInteger SFunction::setProtection(HSQUIRRELVM vm)
  770. {
  771.     SQ_CHECK_PARAM_COUNT(vm, 2);
  772.     SQ_CHECK_PARAM_INT(vm, type, 0);
  773.     SQ_CHECK_PARAM_INT(vm, value, 1);
  774.  
  775.     oCNpc::GetHero()->SetProtection(type, value);
  776.  
  777.     return 0;
  778. }
  779.  
  780. SQInteger SFunction::getProtection(HSQUIRRELVM vm)
  781. {
  782.     SQ_CHECK_PARAM_COUNT(vm, 1);
  783.     SQ_CHECK_PARAM_INT(vm, type, 0);
  784.  
  785.     sq_pushinteger(vm, oCNpc::GetHero()->GetProtection(type));
  786.  
  787.     return 1;
  788. }
  789. */
  790. SQInteger SFunction::completeHeal(HSQUIRRELVM vm)
  791. {
  792.     oCNpc::GetHero()->CompleteHeal();
  793.     return 0;
  794. };
  795.  
  796. SQInteger SFunction::isDead(HSQUIRRELVM vm)
  797. {
  798.     sq_pushbool(vm, oCNpc::GetHero()->IsDead());
  799.     return 0;
  800. };
  801.  
  802. SQInteger SFunction::isUnconscious(HSQUIRRELVM vm)
  803. {
  804.     sq_pushbool(vm, oCNpc::GetHero()->IsUnconscious());
  805.     return 0;
  806. };
  807.  
  808. SQInteger SFunction::setFreeze(HSQUIRRELVM vm)
  809. {
  810.     SQ_CHECK_PARAM_COUNT(vm, 1);
  811.     SQ_CHECK_PARAM_BOOL(vm, freeze, 0);
  812.  
  813.     scr.GetScriptVars()->SetFreeze(freeze);
  814.     if (freeze) oCNpc::GetHero()->CloseInventory();
  815.  
  816.     return 0;
  817. }
  818.  
  819. SQInteger SFunction::isFrozen(HSQUIRRELVM vm)
  820. {
  821.     sq_pushbool(vm, scr.GetScriptVars()->IsFrozen());
  822.     return 1;
  823. }
  824.  
  825. SQInteger SFunction::clearInventory(HSQUIRRELVM vm)
  826. {
  827.     oCNpc::GetHero()->ClearInventory();
  828.     return 0;
  829. };
  830.  
  831. SQInteger SFunction::openInventory(HSQUIRRELVM vm)
  832. {
  833.     oCNpc::GetHero()->OpenInventory();
  834.     return 0;
  835. };
  836.  
  837. SQInteger SFunction::closeInventory(HSQUIRRELVM vm)
  838. {
  839.     oCNpc::GetHero()->CloseInventory();
  840.     return 0;
  841. };
  842.  
  843. SQInteger SFunction::createDraw(HSQUIRRELVM vm)
  844. {
  845.     SQ_CHECK_PARAM_COUNT(vm, 7);
  846.     SQ_CHECK_PARAM_STRING(vm, text, 0);
  847.     SQ_CHECK_PARAM_STRING(vm, font, 1);
  848.     SQ_CHECK_PARAM_INT(vm, x, 2);
  849.     SQ_CHECK_PARAM_INT(vm, y, 3);
  850.     SQ_CHECK_PARAM_INT(vm, r, 4);
  851.     SQ_CHECK_PARAM_INT(vm, g, 5);
  852.     SQ_CHECK_PARAM_INT(vm, b, 6);
  853.  
  854.     SDraw* new_Draw = new SDraw(text, font, x, y, zCOLOR(r, g, b, 255));
  855.     if (new_Draw)
  856.     {
  857.         scr.GetScriptVars()->GetDrawList()->PushBack(new_Draw);
  858.         int drawID = (long)new_Draw;
  859.         sq_pushinteger(vm, drawID);
  860.  
  861.         return 1;
  862.     }
  863.  
  864.     sq_error(vm, "(%s) cannot create new draw", __FUNCTION__);
  865.     return 0;
  866. };
  867.  
  868. SQInteger SFunction::destroyDraw(HSQUIRRELVM vm)
  869. {
  870.     SQ_CHECK_PARAM_COUNT(vm, 1);
  871.     SQ_CHECK_PARAM_INT(vm, drawID, 0);
  872.  
  873.     if (drawID != 0)
  874.     {
  875.         SDraw* draw = (SDraw*)(long)drawID;
  876.         if (draw)
  877.         {
  878.             scr.GetScriptVars()->GetDrawList()->Remove(draw);
  879.             delete draw;
  880.         }
  881.     }
  882.  
  883.     return 0;
  884. };
  885.  
  886. SQInteger SFunction::setDrawVisible(HSQUIRRELVM vm)
  887. {
  888.     SQ_CHECK_PARAM_COUNT(vm, 2);
  889.     SQ_CHECK_PARAM_INT(vm, drawID, 0);
  890.     SQ_CHECK_PARAM_BOOL(vm, enable, 1);
  891.  
  892.     if (drawID != 0)
  893.     {
  894.         SDraw* draw = (SDraw*)(long)drawID;
  895.         if (draw)
  896.         {
  897.             draw->isVisible = enable;
  898.         }
  899.     }
  900.  
  901.     return 0;
  902. };
  903.  
  904. SQInteger SFunction::isDrawVisible(HSQUIRRELVM vm)
  905. {
  906.     SQ_CHECK_PARAM_COUNT(vm, 1);
  907.     SQ_CHECK_PARAM_INT(vm, drawID, 0);
  908.  
  909.     if (drawID != 0)
  910.     {
  911.         SDraw* draw = (SDraw*)(long)drawID;
  912.         if (draw)
  913.         {
  914.             sq_pushbool(vm, draw->isVisible);
  915.         }
  916.     }
  917.  
  918.     return 1;
  919. };
  920.  
  921. SQInteger SFunction::setDrawColor(HSQUIRRELVM vm)
  922. {
  923.     SQ_CHECK_PARAM_COUNT(vm, 4);
  924.     SQ_CHECK_PARAM_INT(vm, drawID, 0);
  925.     SQ_CHECK_PARAM_INT(vm, r, 1);
  926.     SQ_CHECK_PARAM_INT(vm, g, 2);
  927.     SQ_CHECK_PARAM_INT(vm, b, 3);
  928.  
  929.     if (drawID != 0)
  930.     {
  931.         SDraw* draw = (SDraw*)(long)drawID;
  932.         if (draw)
  933.         {
  934.             draw->color = zCOLOR(r, g, b, 255);
  935.         }
  936.     }
  937.  
  938.     return 0;
  939. };
  940.  
  941. SQInteger SFunction::setDrawFont(HSQUIRRELVM vm)
  942. {
  943.     SQ_CHECK_PARAM_COUNT(vm, 2);
  944.     SQ_CHECK_PARAM_INT(vm, drawID, 0);
  945.     SQ_CHECK_PARAM_STRING(vm, font, 1);
  946.  
  947.     if (drawID != 0)
  948.     {
  949.         SDraw* draw = (SDraw*)(long)drawID;
  950.         if (draw)
  951.         {
  952.             draw->font = zSTRING(font);
  953.         }
  954.     }
  955.  
  956.     return 0;
  957. };
  958.  
  959. SQInteger SFunction::setDrawPosition(HSQUIRRELVM vm)
  960. {
  961.     SQ_CHECK_PARAM_COUNT(vm, 3);
  962.     SQ_CHECK_PARAM_INT(vm, drawID, 0);
  963.     SQ_CHECK_PARAM_INT(vm, x, 1);
  964.     SQ_CHECK_PARAM_INT(vm, y, 2);
  965.  
  966.     if (drawID != 0)
  967.     {
  968.         SDraw* draw = (SDraw*)(long)drawID;
  969.         if (draw)
  970.         {
  971.             draw->pos[1] = x;
  972.             draw->pos[2] = y;
  973.         }
  974.     }
  975.  
  976.     return 0;
  977. };
  978.  
  979. SQInteger SFunction::setDrawText(HSQUIRRELVM vm)
  980. {
  981.     SQ_CHECK_PARAM_COUNT(vm, 2);
  982.     SQ_CHECK_PARAM_INT(vm, drawID, 0);
  983.     SQ_CHECK_PARAM_STRING(vm, text, 1);
  984.  
  985.     if (drawID != 0)
  986.     {
  987.         SDraw* draw = (SDraw*)(long)drawID;
  988.         if (draw)
  989.         {
  990.             draw->text = zSTRING(text);
  991.         }
  992.     }
  993.  
  994.     return 0;
  995. };
  996.  
  997. SQInteger SFunction::getDrawPosition(HSQUIRRELVM vm)
  998. {
  999.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1000.     SQ_CHECK_PARAM_INT(vm, drawID, 0);
  1001.  
  1002.     if (drawID != 0)
  1003.     {
  1004.         SDraw* draw = (SDraw*)(long)drawID;
  1005.         if (draw)
  1006.         {
  1007.             sq_newtable(vm);
  1008.             SQ_TABLE_SET_INT(vm, "x", draw->pos[1]);
  1009.             SQ_TABLE_SET_INT(vm, "y", draw->pos[2]);
  1010.  
  1011.             return 1;
  1012.         }
  1013.     }
  1014.  
  1015.     return 0;
  1016. };
  1017.  
  1018. SQInteger SFunction::setCursorVisible(HSQUIRRELVM vm)
  1019. {
  1020.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1021.     SQ_CHECK_PARAM_BOOL(vm, show, 0);
  1022.  
  1023.     zCursor::GetCursor().SetShowing(show);
  1024.  
  1025.     return 0;
  1026. };
  1027.  
  1028. SQInteger SFunction::isCursorVisible(HSQUIRRELVM vm)
  1029. {
  1030.     sq_pushbool(vm, zCursor::GetCursor().IsShowing());
  1031.     return 1;
  1032. };
  1033.  
  1034. SQInteger SFunction::getCursorPos(HSQUIRRELVM vm)
  1035. {
  1036.     MOUSEPOS pos = zCursor::GetCursor().GetPosition();
  1037.  
  1038.     sq_newtable(vm);
  1039.     SQ_TABLE_SET_INT(vm, "x", pos.x);
  1040.     SQ_TABLE_SET_INT(vm, "y", pos.y);
  1041.     SQ_TABLE_SET_FLOAT(vm, "wheel", pos.wheel);
  1042.  
  1043.     return 1;
  1044. };
  1045.  
  1046. SQInteger SFunction::setCursorPos(HSQUIRRELVM vm)
  1047. {
  1048.     SQ_CHECK_PARAM_COUNT(vm, 2);
  1049.     SQ_CHECK_PARAM_INT(vm, x, 0);
  1050.     SQ_CHECK_PARAM_INT(vm, y, 1);
  1051.  
  1052.     zCursor::GetCursor().SetPosition(x, y);
  1053.  
  1054.     return 0;
  1055. }
  1056.  
  1057. SQInteger SFunction::getCursorSensitivity(HSQUIRRELVM vm)
  1058. {
  1059.     sq_pushfloat(vm, zCursor::GetCursor().GetSensitivity());
  1060.     return 1;
  1061. }
  1062.  
  1063. SQInteger SFunction::setCursorSensitivity(HSQUIRRELVM vm)
  1064. {
  1065.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1066.     SQ_CHECK_PARAM_FLOAT(vm, sensitivity, 0);
  1067.  
  1068.     if (sensitivity > 0.0f)
  1069.         zCursor::GetCursor().SetSensitivity(sensitivity);
  1070.  
  1071.     return 0;
  1072. }
  1073.  
  1074. SQInteger SFunction::setCursorTexture(HSQUIRRELVM vm)
  1075. {
  1076.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1077.     SQ_CHECK_PARAM_STRING(vm, texName, 0);
  1078.  
  1079.     zCursor::GetCursor().SetTexture(texName);
  1080.  
  1081.     return 0;
  1082. }
  1083.  
  1084. SQInteger SFunction::getCursorTexture(HSQUIRRELVM vm)
  1085. {
  1086.     sq_pushstring(vm, zCursor::GetCursor().GetTexture().ToChar(), -1);
  1087.     return 1;
  1088. }
  1089.  
  1090. SQInteger SFunction::isClicked(HSQUIRRELVM vm)
  1091. {
  1092.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1093.     SQ_CHECK_PARAM_STRING(vm, button, 0);
  1094.  
  1095.     if (strcmp(button, "LEFT") == 0)
  1096.         sq_pushbool(vm, zCursor::GetCursor().IsLeftBtnClicked());
  1097.     else if (strcmp(button, "RIGHT") == 0)
  1098.         sq_pushbool(vm, zCursor::GetCursor().IsRightBtnClicked());
  1099.     else if (strcmp(button, "WHEEL") == 0)
  1100.         sq_pushbool(vm, zCursor::GetCursor().IsWheelClicked());
  1101.     else
  1102.         sq_pushbool(vm, false);
  1103.  
  1104.     return 1;
  1105. };
  1106.  
  1107. SQInteger SFunction::createTexture(HSQUIRRELVM vm)
  1108. {
  1109.     SQ_CHECK_PARAM_COUNT(vm, 5);
  1110.     SQ_CHECK_PARAM_INT(vm, x, 0);
  1111.     SQ_CHECK_PARAM_INT(vm, y, 1);
  1112.     SQ_CHECK_PARAM_INT(vm, w, 2);
  1113.     SQ_CHECK_PARAM_INT(vm, h, 3);
  1114.     SQ_CHECK_PARAM_STRING(vm, textureString, 4);
  1115.  
  1116.     STexture* new_texture = new STexture(textureString, x, y, w, h);
  1117.     if (new_texture)
  1118.     {
  1119.         scr.GetScriptVars()->GetTextureList()->PushBack(new_texture);
  1120.         int texID = (long)new_texture;
  1121.         sq_pushinteger(vm, texID);
  1122.         return 1;
  1123.     }
  1124.  
  1125.     return 0;
  1126. };
  1127.  
  1128. SQInteger SFunction::destroyTexture(HSQUIRRELVM vm)
  1129. {
  1130.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1131.     SQ_CHECK_PARAM_INT(vm, texID, 0);
  1132.  
  1133.     if (texID != 0)
  1134.     {
  1135.         STexture* tex = (STexture*)(long)texID;
  1136.         if (tex)
  1137.         {
  1138.             scr.GetScriptVars()->GetTextureList()->Remove(tex);
  1139.             delete tex;
  1140.         }
  1141.     }
  1142.  
  1143.     return 0;
  1144. };
  1145.  
  1146. SQInteger SFunction::setTexture(HSQUIRRELVM vm)
  1147. {
  1148.     SQ_CHECK_PARAM_COUNT(vm, 2);
  1149.     SQ_CHECK_PARAM_INT(vm, texID, 0);
  1150.     SQ_CHECK_PARAM_STRING(vm, texName, 1);
  1151.  
  1152.     if (texID != 0)
  1153.     {
  1154.         STexture* tex = (STexture*)(long)texID;
  1155.         if (tex)
  1156.         {
  1157.             tex->texName = texName;
  1158.  
  1159.             if (tex->isVisible == true)
  1160.             {
  1161.                 zCView::GetScreen()->RemoveItem(tex);
  1162.                 tex->texture->InsertBack(zSTRING(texName));
  1163.                 zCView::GetScreen()->InsertItem(tex, true);
  1164.             }
  1165.             else
  1166.                 tex->texture->InsertBack(zSTRING(texName));
  1167.         }
  1168.     }
  1169.  
  1170.     return 0;
  1171. };
  1172.  
  1173. SQInteger SFunction::getTexture(HSQUIRRELVM vm)
  1174. {
  1175.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1176.     SQ_CHECK_PARAM_INT(vm, texID, 0);
  1177.  
  1178.     if (texID != 0)
  1179.     {
  1180.         STexture* tex = (STexture*)(long)texID;
  1181.         if (tex)
  1182.         {
  1183.             sq_pushstring(vm, tex->texName.ToChar(), -1);
  1184.         }
  1185.         else
  1186.             sq_pushbool(vm, false);
  1187.     }
  1188.     else
  1189.         sq_pushbool(vm, false);
  1190.  
  1191.     return 1;
  1192. };
  1193.  
  1194. SQInteger SFunction::setTexturePosition(HSQUIRRELVM vm)
  1195. {
  1196.     SQ_CHECK_PARAM_COUNT(vm, 3);
  1197.     SQ_CHECK_PARAM_INT(vm, texID, 0);
  1198.     SQ_CHECK_PARAM_INT(vm, x, 1);
  1199.     SQ_CHECK_PARAM_INT(vm, y, 2);
  1200.  
  1201.     if (texID != 0)
  1202.     {
  1203.         STexture* tex = (STexture*)(long)texID;
  1204.         if (tex)
  1205.         {
  1206.             tex->pos[1] = x;
  1207.             tex->pos[2] = y;
  1208.            
  1209.             if (tex->isVisible == true)
  1210.                 tex->texture->SetPos(x, y);
  1211.         }
  1212.     }
  1213.  
  1214.     return 0;
  1215. };
  1216.  
  1217. SQInteger SFunction::getTexturePosition(HSQUIRRELVM vm)
  1218. {
  1219.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1220.     SQ_CHECK_PARAM_INT(vm, texID, 0);
  1221.  
  1222.     if (texID != 0)
  1223.     {
  1224.         STexture* tex = (STexture*)(long)texID;
  1225.         if (tex)
  1226.         {
  1227.             sq_newtable(vm);
  1228.             SQ_TABLE_SET_INT(vm, "x", tex->pos[1]);
  1229.             SQ_TABLE_SET_INT(vm, "y", tex->pos[2]);
  1230.         }
  1231.         else
  1232.             sq_pushbool(vm, false);
  1233.     }
  1234.     else
  1235.         sq_pushbool(vm, false);
  1236.  
  1237.     return 1;
  1238. };
  1239.  
  1240. SQInteger SFunction::setTextureSize(HSQUIRRELVM vm)
  1241. {
  1242.     SQ_CHECK_PARAM_COUNT(vm, 3);
  1243.     SQ_CHECK_PARAM_INT(vm, texID, 0);
  1244.     SQ_CHECK_PARAM_INT(vm, w, 1);
  1245.     SQ_CHECK_PARAM_INT(vm, h, 2);
  1246.  
  1247.     if (texID != 0)
  1248.     {
  1249.         STexture* tex = (STexture*)(long)texID;
  1250.         if (tex)
  1251.         {
  1252.             tex->pos[3] = w;
  1253.             tex->pos[4] = h;
  1254.            
  1255.             if (tex->isVisible == true)
  1256.                 tex->texture->SetSize(w, h);
  1257.         }
  1258.     }
  1259.  
  1260.     return 0;
  1261. };
  1262.  
  1263. SQInteger SFunction::getTextureSize(HSQUIRRELVM vm)
  1264. {
  1265.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1266.     SQ_CHECK_PARAM_INT(vm, texID, 0);
  1267.  
  1268.     if (texID != 0)
  1269.     {
  1270.         STexture* tex = (STexture*)(long)texID;
  1271.         if (tex)
  1272.         {
  1273.             sq_newtable(vm);
  1274.             SQ_TABLE_SET_INT(vm, "width", tex->pos[3]);
  1275.             SQ_TABLE_SET_INT(vm, "height", tex->pos[4]);
  1276.         }
  1277.         else
  1278.             sq_pushbool(vm, false);
  1279.     }
  1280.     else
  1281.         sq_pushbool(vm, false);
  1282.  
  1283.     return 1;
  1284. };
  1285.  
  1286. SQInteger SFunction::setTextureVisible(HSQUIRRELVM vm)
  1287. {
  1288.     SQ_CHECK_PARAM_COUNT(vm, 2);
  1289.     SQ_CHECK_PARAM_INT(vm, texID, 0);
  1290.     SQ_CHECK_PARAM_BOOL(vm, enable, 1);
  1291.  
  1292.     if (texID != 0)
  1293.     {
  1294.         STexture* tex = (STexture*)(long)texID;
  1295.         if (tex)
  1296.         {
  1297.             if (enable == 0 && tex->isVisible == true)
  1298.                 tex->SetVisible(false);
  1299.             else if (enable == 1 && tex->isVisible == false)
  1300.                 tex->SetVisible(true);
  1301.         }
  1302.     }
  1303.  
  1304.     return 0;
  1305. };
  1306.  
  1307. SQInteger SFunction::isTextureVisible(HSQUIRRELVM vm)
  1308. {
  1309.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1310.     SQ_CHECK_PARAM_INT(vm, texID, 0);
  1311.  
  1312.     if (texID != 0)
  1313.     {
  1314.         STexture* tex = (STexture*)(long)texID;
  1315.         if (tex)
  1316.         {
  1317.             sq_pushbool(vm, tex->isVisible);
  1318.         }
  1319.     }
  1320.     else
  1321.         sq_pushbool(vm, false);
  1322.  
  1323.     return 2;
  1324. };
  1325.  
  1326. SQInteger SFunction::md5File(HSQUIRRELVM vm)
  1327. {
  1328.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1329.     SQ_CHECK_PARAM_STRING(vm, filename, 0);
  1330.  
  1331.     md5wrapper md5;
  1332.     sq_pushstring(vm, md5.getHashFromFile(filename).c_str(), -1);
  1333.  
  1334.     return 1;
  1335. };
  1336.  
  1337. SQInteger SFunction::md5(HSQUIRRELVM vm)
  1338. {
  1339.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1340.     SQ_CHECK_PARAM_STRING(vm, text, 0);
  1341.  
  1342.     md5wrapper md5;
  1343.     sq_pushstring(vm, md5.getHashFromString(text).c_str(), -1);
  1344.  
  1345.     return 1;
  1346. };
  1347.  
  1348. SQInteger SFunction::sha1(HSQUIRRELVM vm)
  1349. {
  1350.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1351.     SQ_CHECK_PARAM_STRING(vm, text, 0);
  1352.  
  1353.     sha1wrapper sha1;
  1354.     sq_pushstring(vm, sha1.getHashFromString(text).c_str(), -1);
  1355.  
  1356.     return 1;
  1357. };
  1358.  
  1359. SQInteger SFunction::sha256(HSQUIRRELVM vm)
  1360. {
  1361.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1362.     SQ_CHECK_PARAM_STRING(vm, text, 0);
  1363.  
  1364.     sha256wrapper sha256;
  1365.     sq_pushstring(vm, sha256.getHashFromString(text).c_str(), -1);
  1366.  
  1367.     return 1;
  1368. };
  1369.  
  1370. SQInteger SFunction::sha384(HSQUIRRELVM vm)
  1371. {
  1372.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1373.     SQ_CHECK_PARAM_STRING(vm, text, 0);
  1374.  
  1375.     sha384wrapper sha384;
  1376.     sq_pushstring(vm, sha384.getHashFromString(text).c_str(), -1);
  1377.  
  1378.     return 1;
  1379. };
  1380.  
  1381. SQInteger SFunction::sha512(HSQUIRRELVM vm)
  1382. {
  1383.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1384.     SQ_CHECK_PARAM_STRING(vm, text, 0);
  1385.  
  1386.     sha512wrapper sha512;
  1387.     sq_pushstring(vm, sha512.getHashFromString(text).c_str(), -1);
  1388.  
  1389.     return 1;
  1390. };
  1391.  
  1392. SQInteger SFunction::equipArmor(HSQUIRRELVM vm)
  1393. {
  1394.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1395.     SQ_CHECK_PARAM_STRING(vm, instance, 0);
  1396.  
  1397.     oCNpc* hero = oCNpc::GetHero();
  1398.     oCItem* currentArmor = hero->GetEquippedArmor();
  1399.     if (currentArmor != 0)
  1400.     {
  1401.         hero->UnequipItem(currentArmor);
  1402.         currentArmor = 0;
  1403.     }
  1404.  
  1405.     currentArmor = hero->CreateItem(zSTRING(instance), 1);
  1406.     if (currentArmor)
  1407.     {
  1408.         hero->Equip(currentArmor);
  1409.         sq_pushbool(vm, true);
  1410.     }
  1411.     else
  1412.         sq_pushbool(vm, false);
  1413.  
  1414.     return 1;
  1415. };
  1416.  
  1417. SQInteger SFunction::unequipArmor(HSQUIRRELVM vm)
  1418. {
  1419.     oCItem* item = oCNpc::GetHero()->GetEquippedArmor();
  1420.     if (item)
  1421.         oCNpc::GetHero()->UnequipItem(item);
  1422.  
  1423.     return 0;
  1424. };
  1425.  
  1426. SQInteger SFunction::equipMeleeWeapon(HSQUIRRELVM vm)
  1427. {
  1428.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1429.     SQ_CHECK_PARAM_STRING(vm, instance, 0);
  1430.     oCNpc* hero = oCNpc::GetHero();
  1431.     oCItem* currentWeapon = hero->GetEquippedMeleeWeapon();
  1432.  
  1433.     if (currentWeapon != 0)
  1434.     {
  1435.         hero->UnequipItem(currentWeapon);
  1436.         currentWeapon = 0;
  1437.     }
  1438.     currentWeapon = hero->CreateItem(zSTRING(instance), 1);
  1439.     if (currentWeapon)
  1440.     {
  1441.         hero->Equip(currentWeapon);
  1442.         sq_pushbool(vm, true);
  1443.     }
  1444.     else
  1445.         sq_pushbool(vm, false);
  1446.  
  1447.     return 1;
  1448. };
  1449.  
  1450. SQInteger SFunction::unequipMeleeWeapon(HSQUIRRELVM vm)
  1451. {
  1452.     oCItem* item = oCNpc::GetHero()->GetEquippedMeleeWeapon();
  1453.     if (item)
  1454.         oCNpc::GetHero()->UnequipItem(item);
  1455.  
  1456.     return 0;
  1457. };
  1458.  
  1459. SQInteger SFunction::equipRangedWeapon(HSQUIRRELVM vm)
  1460. {
  1461.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1462.     SQ_CHECK_PARAM_STRING(vm, instance, 0);
  1463.     oCNpc* hero = oCNpc::GetHero();
  1464.     oCItem* currentWeapon = hero->GetEquippedRangedWeapon();
  1465.  
  1466.     if (currentWeapon != 0)
  1467.     {
  1468.         hero->UnequipItem(currentWeapon);
  1469.         currentWeapon = 0;
  1470.     }
  1471.  
  1472.     currentWeapon = hero->CreateItem(zSTRING(instance), 1);
  1473.     if (currentWeapon)
  1474.     {
  1475.         hero->Equip(currentWeapon);
  1476.         sq_pushbool(vm, true);
  1477.     }
  1478.     else
  1479.         sq_pushbool(vm, false);
  1480.  
  1481.     return 1;
  1482. };
  1483.  
  1484. SQInteger SFunction::unequipRangedWeapon(HSQUIRRELVM vm)
  1485. {
  1486.     oCItem* item = oCNpc::GetHero()->GetEquippedRangedWeapon();
  1487.     if (item)
  1488.         oCNpc::GetHero()->UnequipItem(item);
  1489.  
  1490.     return 0;
  1491. };
  1492.  
  1493. SQInteger SFunction::getArmorInstance(HSQUIRRELVM vm)
  1494. {
  1495.     oCItem* item = oCNpc::GetHero()->GetEquippedArmor();
  1496.     if (item)
  1497.         sq_pushstring(vm, item->GetInstanceName().ToChar(), -1);
  1498.     else
  1499.         sq_pushstring(vm, "NULL", -1);
  1500.  
  1501.     return 1;
  1502. };
  1503.  
  1504. SQInteger SFunction::getMeleeInstance(HSQUIRRELVM vm)
  1505. {
  1506.     oCItem* item = oCNpc::GetHero()->GetEquippedMeleeWeapon();
  1507.  
  1508.     if (item)
  1509.         sq_pushstring(vm, item->GetInstanceName().ToChar(), -1);
  1510.     else
  1511.         sq_pushstring(vm, "NULL", -1);
  1512.  
  1513.     return 1;
  1514. };
  1515.  
  1516. SQInteger SFunction::getRangedInstance(HSQUIRRELVM vm)
  1517. {
  1518.     oCItem* item = oCNpc::GetHero()->GetEquippedRangedWeapon();
  1519.  
  1520.     if (item)
  1521.         sq_pushstring(vm, item->GetInstanceName().ToChar(), -1);
  1522.     else
  1523.         sq_pushstring(vm, "NULL", -1);
  1524.  
  1525.     return 1;
  1526. };
  1527.  
  1528. SQInteger SFunction::clearChat(HSQUIRRELVM vm)
  1529. {
  1530.     core.GetChat()->Clear();
  1531.     return 0;
  1532. }
  1533.  
  1534. SQInteger SFunction::giveItem(HSQUIRRELVM vm)
  1535. {
  1536.     SQ_CHECK_PARAM_COUNT(vm, 2);
  1537.     SQ_CHECK_PARAM_STRING(vm, instance, 0);
  1538.     SQ_CHECK_PARAM_INT(vm, amount, 1);
  1539.  
  1540.     oCNpc::GetHero()->CreateItem(zSTRING(instance), amount);
  1541.  
  1542.     return 0;
  1543. };
  1544.  
  1545. SQInteger SFunction::removeItem(HSQUIRRELVM vm)
  1546. {
  1547.     SQ_CHECK_PARAM_COUNT(vm, 2);
  1548.     SQ_CHECK_PARAM_STRING(vm, instance, 0);
  1549.     SQ_CHECK_PARAM_INT(vm, amount, 1);
  1550.  
  1551.     oCNpc* hero = oCNpc::GetHero();
  1552.     int index = zCParser::GetParser()->GetIndex(zSTRING(instance));
  1553.     if (index != 0)
  1554.     {
  1555.         oCItem* item = hero->IsInInv(index, 1);
  1556.         if (item->GetAmount() > amount)
  1557.             item->SetAmount(item->GetAmount() - amount);
  1558.         else if (item->GetAmount() <= amount)
  1559.         {
  1560.             hero->DoDropVob(item);
  1561.             item->RemoveVobFromWorld();
  1562.         }
  1563.     }
  1564.  
  1565.     return 0;
  1566. };
  1567.  
  1568. SQInteger SFunction::getWeaponMode(HSQUIRRELVM vm)
  1569. {
  1570.     sq_pushinteger(vm, (int)oCNpc::GetHero()->GetWeaponMode());
  1571.     return 1;
  1572. };
  1573.  
  1574. SQInteger SFunction::setWeaponMode(HSQUIRRELVM vm)
  1575. {
  1576.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1577.     SQ_CHECK_PARAM_INT(vm, weaponMode, 0);
  1578.  
  1579.     oCNpc::GetHero()->SetWeaponMode2((oCNpc_WeaponMode)weaponMode);
  1580.  
  1581.     return 0;
  1582. };
  1583.  
  1584. SQInteger SFunction::playAnimation(HSQUIRRELVM vm)
  1585. {
  1586.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1587.     SQ_CHECK_PARAM_STRING(vm, animation, 0);
  1588.  
  1589.     oCNpc::GetHero()->GetModel()->StartAni(zSTRING(animation), 0);
  1590.  
  1591.     return 0;
  1592. };
  1593.  
  1594. SQInteger SFunction::setTimer(HSQUIRRELVM vm)
  1595. {
  1596.     SQ_CHECK_PARAM_COUNT(vm, 3);
  1597.     SQ_CHECK_PARAM_FUNC(vm, function, 0);
  1598.     SQ_CHECK_PARAM_INT(vm, time, 1);
  1599.     SQ_CHECK_PARAM_BOOL(vm, repeat, 2);
  1600.     SQ_PARAM_ANY(vm, data, 3);
  1601.  
  1602.     // Checking last arg, because he initialize itself
  1603.     if (stack_size <= 4)
  1604.         data._type = OT_NULL;
  1605.  
  1606.     sq_pushinteger(vm, timer.Add(function, time, repeat, data));
  1607.  
  1608.     return 1;
  1609. };
  1610.  
  1611. SQInteger SFunction::killTimer(HSQUIRRELVM vm)
  1612. {
  1613.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1614.     SQ_CHECK_PARAM_INT(vm, timerId, 0);
  1615.  
  1616.     timer.Remove(timerId);
  1617.  
  1618.     return 0;
  1619. };
  1620.  
  1621. SQInteger SFunction::setTimerInterval(HSQUIRRELVM vm)
  1622. {
  1623.     SQ_CHECK_PARAM_COUNT(vm, 2);
  1624.     SQ_CHECK_PARAM_INT(vm, timerId, 0);
  1625.     SQ_CHECK_PARAM_INT(vm, interval, 1);
  1626.  
  1627.     timer.SetInterval(timerId, interval);
  1628.  
  1629.     return 0;
  1630. };
  1631.  
  1632. SQInteger SFunction::setTimerRepeat(HSQUIRRELVM vm)
  1633. {
  1634.     SQ_CHECK_PARAM_COUNT(vm, 2);
  1635.     SQ_CHECK_PARAM_INT(vm, timerId, 0);
  1636.     SQ_CHECK_PARAM_INT(vm, repeat, 1);
  1637.  
  1638.     timer.SetRepeat(timerId, repeat);
  1639.  
  1640.     return 0;
  1641. };
  1642.  
  1643. SQInteger SFunction::setTimerData(HSQUIRRELVM vm)
  1644. {
  1645.     SQ_CHECK_PARAM_COUNT(vm, 2);
  1646.     SQ_CHECK_PARAM_INT(vm, timerId, 0);
  1647.     SQ_CHECK_PARAM_TABLE(vm, data, 1);
  1648.  
  1649.     timer.SetData(timerId, data);
  1650.  
  1651.     return 0;
  1652. };
  1653.  
  1654. SQInteger SFunction::setCameraBeforeHero(HSQUIRRELVM vm)
  1655. {
  1656.     zVEC3 position = oCNpc::GetHero()->GetPosition();
  1657.     float angle = oCNpc::GetHero()->GetHeading();
  1658.  
  1659.     // 50 to dystans od kamerki
  1660.     position.x += sin(angle * 3.14 / 180.0) * 50;
  1661.     position.z += cos(angle * 3.14 / 180.0) * 50;
  1662.  
  1663.     angle += 180.0f;
  1664.     if (angle > 360.0f) angle -= 360.0f;
  1665.  
  1666.     zCVob *vob = oCObjectFactory::GetFactory()->CreateVob(zSTRING("INVISIBLE_DEFAULT.3DS"), false, position, zVEC3(0.0f, angle, 0.0f));
  1667.     if (vob) zCAICamera::GetCurrent()->SetTarget(vob);
  1668.  
  1669.     return 0;
  1670. };
  1671.  
  1672. SQInteger SFunction::setDefaultCamera(HSQUIRRELVM vm)
  1673. {
  1674.     // Chyba jeszcze trzeba tutaj zwolnić pamięć tego voba od kamerki
  1675.     zCAICamera::GetCurrent()->SetTarget(oCNpc::GetHero());
  1676.     return 0;
  1677. };
  1678.  
  1679. SQInteger SFunction::setWorld(HSQUIRRELVM vm)
  1680. {
  1681.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1682.     SQ_CHECK_PARAM_STRING(vm, world, 0);
  1683.  
  1684.     oCGame::GetGame()->ChangeLevel(zSTRING(world), zSTRING("start"));
  1685.  
  1686.     return 0;
  1687. };
  1688.  
  1689. SQInteger SFunction::getWorld(HSQUIRRELVM vm)
  1690. {
  1691.     zSTRING world = oCGame::GetGame()->GetGameWorld()->GetWorldName();
  1692.     sq_pushstring(vm, world.ToChar(), -1);
  1693.  
  1694.     return 1;
  1695. };
  1696.  
  1697. SQInteger SFunction::setSavingEnabled(HSQUIRRELVM vm)
  1698. {
  1699.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1700.     SQ_CHECK_PARAM_BOOL(vm, enable, 0);
  1701.  
  1702.     scr.GetScriptVars()->SetSavingEnabled(enable);
  1703.  
  1704.     return 0;
  1705. };
  1706.  
  1707. SQInteger SFunction::isSavingEnabled(HSQUIRRELVM vm)
  1708. {
  1709.     sq_pushbool(vm, scr.GetScriptVars()->IsSavingEnabled());
  1710.     return 1;
  1711. };
  1712.  
  1713. SQInteger SFunction::getItemName(HSQUIRRELVM vm)
  1714. {
  1715.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1716.     SQ_CHECK_PARAM_STRING(vm, instance, 0);
  1717.     oCNpc* hero = oCNpc::GetHero();
  1718.     oCItem* item = hero->CreateItem(zSTRING(instance), 1);
  1719.  
  1720.     if (item)
  1721.     {
  1722.         sq_pushstring(vm, item->GetName(0).ToChar(), -1);
  1723.         hero->DoDropVob(item);
  1724.         item->RemoveVobFromWorld();
  1725.     }
  1726.     else
  1727.         sq_pushstring(vm, "NULL", -1);
  1728.  
  1729.     return 1;
  1730. };
  1731.  
  1732. SQInteger SFunction::getItemDescription(HSQUIRRELVM vm)
  1733. {
  1734.     SQ_CHECK_PARAM_COUNT(vm, 2);
  1735.     SQ_CHECK_PARAM_STRING(vm, instance, 0);
  1736.     SQ_CHECK_PARAM_INT(vm, index, 1);
  1737.  
  1738.     if (index >= 0 && index <= 5)
  1739.     {
  1740.         oCNpc* hero = oCNpc::GetHero();
  1741.         oCItem* item = hero->CreateItem(zSTRING(instance), 1);
  1742.  
  1743.         if (item && !item->GetText(index).IsEmpty())
  1744.         {
  1745.             sq_pushstring(vm, item->GetText(index).ToChar(), -1);
  1746.             hero->DoDropVob(item);
  1747.             item->RemoveVobFromWorld();
  1748.         }
  1749.         else
  1750.             sq_pushstring(vm, "NULL", -1);
  1751.     }
  1752.     else
  1753.         sq_pushstring(vm, "NULL", -1);
  1754.  
  1755.     return 1;
  1756. };
  1757.  
  1758. SQInteger SFunction::getItemValue(HSQUIRRELVM vm)
  1759. {
  1760.     SQ_CHECK_PARAM_COUNT(vm, 2);
  1761.     SQ_CHECK_PARAM_STRING(vm, instance, 0);
  1762.     SQ_CHECK_PARAM_INT(vm, index, 1);
  1763.  
  1764.     if (index >= 0 && index <= 5)
  1765.     {
  1766.         oCNpc* hero = oCNpc::GetHero();
  1767.         oCItem* item = hero->CreateItem(zSTRING(instance), 1);
  1768.  
  1769.         if (item)
  1770.         {
  1771.             sq_pushinteger(vm, item->GetCount(index));
  1772.             hero->DoDropVob(item);
  1773.             item->RemoveVobFromWorld();
  1774.         }
  1775.         else
  1776.             sq_pushinteger(vm, -1);
  1777.     }
  1778.     else
  1779.         sq_pushinteger(vm, -1);
  1780.  
  1781.     return 1;
  1782. };
  1783.  
  1784. SQInteger SFunction::getInstance(HSQUIRRELVM vm)
  1785. {
  1786.     sq_pushstring(vm, oCNpc::GetHero()->GetInstanceName().ToChar(), -1);
  1787.     return 1;
  1788. };
  1789.  
  1790. SQInteger SFunction::setInstance(HSQUIRRELVM vm)
  1791. {
  1792.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1793.     SQ_CHECK_PARAM_STRING(vm, instance, 0);
  1794.  
  1795.     oCNpc* hero = oCNpc::GetHero();
  1796.     zVEC3 pos = hero->GetPosition();
  1797.     oCNpc* new_hero = oCGame::GetGame()->CreateNPC(zSTRING(instance), pos.x, pos.y + 30, pos.z);
  1798.     if (new_hero)
  1799.     {
  1800.         zSTRING bodyModel, headModel;
  1801.         int bodyTexture, headTexture;
  1802.  
  1803.         CLocalPlayer *player = playerManager.GetLocalPlayer();
  1804.         player->GetAdditionalVisuals(bodyModel, bodyTexture, headModel, headTexture);
  1805.  
  1806.         new_hero->SetAsPlayer();
  1807.         hero->DestroyNpc();
  1808.  
  1809.         player->SetAdditionalVisuals(bodyModel, bodyTexture, headModel, headTexture);
  1810.     }
  1811.  
  1812.     return 0;
  1813. };
  1814.  
  1815. SQInteger SFunction::checkPrograms(HSQUIRRELVM vm)
  1816. {
  1817.     SAnticheat::enumWindows();
  1818.     return 0;
  1819. };
  1820.  
  1821. SQInteger SFunction::createVob(HSQUIRRELVM vm)
  1822. {
  1823.     SQ_CHECK_PARAM_COUNT(vm, 7);
  1824.     SQ_CHECK_PARAM_STRING(vm, visual, 0);
  1825.     SQ_CHECK_PARAM_FLOAT(vm, x, 1);
  1826.     SQ_CHECK_PARAM_FLOAT(vm, y, 2);
  1827.     SQ_CHECK_PARAM_FLOAT(vm, z, 3);
  1828.     SQ_CHECK_PARAM_FLOAT(vm, rotx, 4);
  1829.     SQ_CHECK_PARAM_FLOAT(vm, roty, 5);
  1830.     SQ_CHECK_PARAM_FLOAT(vm, rotz, 6);
  1831.  
  1832.     CVob* vob = vobManager.CreateVob(zSTRING(visual), zVEC3(x, y, z), zVEC3(rotx, roty, rotz));
  1833.     if (vob)
  1834.     {
  1835.         sq_pushinteger(vm, vob->GetID());
  1836.     }
  1837.     else
  1838.         sq_pushinteger(vm, -1);
  1839.  
  1840.     return 1;
  1841. };
  1842.  
  1843. SQInteger SFunction::destroyVob(HSQUIRRELVM vm)
  1844. {
  1845.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1846.     SQ_CHECK_PARAM_INT(vm, vobID, 0);
  1847.  
  1848.     CVob* vob = vobManager.GetById(vobID);
  1849.     if (vob)
  1850.         vobManager.DestroyVob(vob);
  1851.  
  1852.     return 0;
  1853. };
  1854.  
  1855. SQInteger SFunction::getVobPosition(HSQUIRRELVM vm)
  1856. {
  1857.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1858.     SQ_CHECK_PARAM_INT(vm, vobID, 0);
  1859.  
  1860.     CVob* vob = vobManager.GetById(vobID);
  1861.  
  1862.     if (vob)
  1863.     {
  1864.         zVEC3 pos = vob->GetZVob()->GetPositionWorld();
  1865.  
  1866.         sq_newtable(vm);
  1867.         SQ_TABLE_SET_FLOAT(vm, "x", pos.x);
  1868.         SQ_TABLE_SET_FLOAT(vm, "y", pos.y);
  1869.         SQ_TABLE_SET_FLOAT(vm, "z", pos.z);
  1870.     }
  1871.     else
  1872.         sq_pushnull(vm);
  1873.  
  1874.     return 1;
  1875. };
  1876.  
  1877. SQInteger SFunction::getVobRotation(HSQUIRRELVM vm)
  1878. {
  1879.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1880.     SQ_CHECK_PARAM_INT(vm, vobID, 0);
  1881.  
  1882.     CVob* vob = vobManager.GetById(vobID);
  1883.  
  1884.     if (vob)
  1885.     {
  1886.         zVEC3 pos = vob->GetRotation();
  1887.  
  1888.         sq_newtable(vm);
  1889.         SQ_TABLE_SET_FLOAT(vm, "x", pos.x);
  1890.         SQ_TABLE_SET_FLOAT(vm, "y", pos.y);
  1891.         SQ_TABLE_SET_FLOAT(vm, "z", pos.z);
  1892.     }
  1893.     else
  1894.         sq_pushnull(vm);
  1895.  
  1896.     return 1;
  1897. };
  1898.  
  1899. SQInteger SFunction::setVobPosition(HSQUIRRELVM vm)
  1900. {
  1901.     SQ_CHECK_PARAM_COUNT(vm, 4);
  1902.     SQ_CHECK_PARAM_INT(vm, vobID, 0);
  1903.     SQ_CHECK_PARAM_FLOAT(vm, x, 1);
  1904.     SQ_CHECK_PARAM_FLOAT(vm, y, 2);
  1905.     SQ_CHECK_PARAM_FLOAT(vm, z, 3);
  1906.  
  1907.     CVob* vob = vobManager.GetById(vobID);
  1908.     if (vob)
  1909.         vob->GetZVob()->SetPositionWorld(zVEC3(x, y, z));
  1910.  
  1911.     return 0;
  1912. };
  1913.  
  1914. SQInteger SFunction::setVobRotation(HSQUIRRELVM vm)
  1915. {
  1916.     SQ_CHECK_PARAM_COUNT(vm, 4);
  1917.     SQ_CHECK_PARAM_INT(vm, vobID, 0);
  1918.     SQ_CHECK_PARAM_FLOAT(vm, x, 1);
  1919.     SQ_CHECK_PARAM_FLOAT(vm, y, 2);
  1920.     SQ_CHECK_PARAM_FLOAT(vm, z, 3);
  1921.  
  1922.     CVob* vob = vobManager.GetById(vobID);
  1923.     if (vob)
  1924.         vob->SetRotation(zVEC3(x, y, z));
  1925.  
  1926.     return 0;
  1927. };
  1928.  
  1929. SQInteger SFunction::setVobCollision(HSQUIRRELVM vm)
  1930. {
  1931.     SQ_CHECK_PARAM_COUNT(vm, 2);
  1932.     SQ_CHECK_PARAM_INT(vm, vobID, 0);
  1933.     SQ_CHECK_PARAM_BOOL(vm, enable, 1);
  1934.  
  1935.     if (vobID >= 0)
  1936.     {
  1937.         CVob* vob = vobManager.GetById(vobID);
  1938.         if (vob)
  1939.             vob->GetZVob()->SetCollDet(enable);
  1940.     }
  1941.  
  1942.     return 0;
  1943. };
  1944.  
  1945. SQInteger SFunction::setCameraBehindVob(HSQUIRRELVM vm)
  1946. {
  1947.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1948.     SQ_CHECK_PARAM_INT(vm, vobID, 0);
  1949.  
  1950.     if (vobID >= 0)
  1951.     {
  1952.         CVob* vob = vobManager.GetById(vobID);
  1953.         if (vob)
  1954.             zCAICamera::GetCurrent()->SetTarget(vob->GetZVob());
  1955.     }
  1956.  
  1957.     return 0;
  1958. };
  1959.  
  1960. SQInteger SFunction::setWeaponSkill(HSQUIRRELVM vm)
  1961. {
  1962.     SQ_CHECK_PARAM_COUNT(vm, 2);
  1963.     SQ_CHECK_PARAM_INT(vm, skillID, 0);
  1964.     SQ_CHECK_PARAM_INT(vm, value, 1);
  1965.  
  1966.     oCNpc::GetHero()->SetSkillWeapon(skillID, value);
  1967.  
  1968.     return 0;
  1969. };
  1970.  
  1971. SQInteger SFunction::getWeaponSkill(HSQUIRRELVM vm)
  1972. {
  1973.     SQ_CHECK_PARAM_COUNT(vm, 1);
  1974.     SQ_CHECK_PARAM_INT(vm, skillID, 0);
  1975.  
  1976.     sq_pushinteger(vm, oCNpc::GetHero()->GetSkillWeapon(skillID));
  1977.  
  1978.     return 1;
  1979. }
  1980.  
  1981. SQInteger SFunction::getAnimationID(HSQUIRRELVM vm)
  1982. {
  1983.     sq_pushinteger(vm, oCNpc::GetHero()->GetAnimationID());
  1984.     return 1;
  1985. }
  1986.  
  1987. SQInteger SFunction::getAnimationName(HSQUIRRELVM vm)
  1988. {
  1989.     sq_pushstring(vm, oCNpc::GetHero()->GetAnimationName().ToChar(), -1);
  1990.     return 1;
  1991. }
  1992.  
  1993. SQInteger SFunction::getAdditionalVisual(HSQUIRRELVM vm)
  1994. {
  1995.     zSTRING bodyModel, headModel;
  1996.     int bodyTexture, headTexture;
  1997.  
  1998.     playerManager.GetLocalPlayer()->GetAdditionalVisuals(bodyModel, bodyTexture, headModel, headTexture);
  1999.  
  2000.     sq_newtable(vm);
  2001.     SQ_TABLE_SET_STRING(vm, "bodyModel", bodyModel.ToChar());
  2002.     SQ_TABLE_SET_INT(vm, "bodyTexture", bodyTexture);
  2003.     SQ_TABLE_SET_STRING(vm, "headModel", headModel.ToChar());
  2004.     SQ_TABLE_SET_INT(vm, "headTexture", headTexture);
  2005.  
  2006.     return 1;
  2007. }
  2008.  
  2009. SQInteger SFunction::setAdditionalVisual(HSQUIRRELVM vm)
  2010. {
  2011.     SQ_CHECK_PARAM_COUNT(vm, 4);
  2012.     SQ_CHECK_PARAM_STRING(vm, bodyModel, 0);
  2013.     SQ_CHECK_PARAM_INT(vm, bodyTexture, 1);
  2014.     SQ_CHECK_PARAM_STRING(vm, headModel, 2);
  2015.     SQ_CHECK_PARAM_INT(vm, headTexture, 3);
  2016.  
  2017.     playerManager.GetLocalPlayer()->SetAdditionalVisuals(zSTRING(bodyModel), bodyTexture, zSTRING(headModel), headTexture);
  2018.  
  2019.     return 0;
  2020. }
  2021.  
  2022. SQInteger SFunction::hasItem(HSQUIRRELVM vm)
  2023. {
  2024.     SQ_CHECK_PARAM_COUNT(vm, 1);
  2025.     SQ_CHECK_PARAM_STRING(vm, instance, 0);
  2026.  
  2027.     oCNpc* hero = oCNpc::GetHero();
  2028.     int index = zCParser::GetParser()->GetIndex(zSTRING(instance));
  2029.     if (index != 0)
  2030.     {
  2031.         oCItem* item = hero->IsInInv(index, 1);
  2032.         if (item)
  2033.         {
  2034.             sq_pushinteger(vm, item->GetAmount());
  2035.             return 1;
  2036.         }
  2037.     }
  2038.     sq_pushinteger(vm, -1);
  2039.  
  2040.     return 1;
  2041. }
  2042.  
  2043. SQInteger SFunction::getEq(HSQUIRRELVM vm)
  2044. {
  2045.     oCNpc* hero = oCNpc::GetHero();
  2046.     sq_newarray(vm, 0);
  2047.  
  2048.     for (int i = 0; i < 5000; ++i)
  2049.     {
  2050.         oCItem* item = hero->IsInInv(i, 0);
  2051.         if (item)
  2052.         {
  2053.             sq_newtable(vm);
  2054.             SQ_TABLE_SET_STRING(vm, "instance", item->GetInstanceName().ToChar());
  2055.             SQ_TABLE_SET_INT(vm, "amount", item->GetAmount());
  2056.             sq_arrayappend(vm, -2);
  2057.         }
  2058.     }
  2059.  
  2060.     return 1;
  2061. }
  2062.  
  2063. SQInteger SFunction::sendVisual(HSQUIRRELVM vm)
  2064. {
  2065.     zSTRING bodyModel, headModel;
  2066.     int bodyTexture, headTexture;
  2067.  
  2068.     playerManager.GetLocalPlayer()->GetAdditionalVisuals(bodyModel, bodyTexture, headModel, headTexture);
  2069.  
  2070.     CNetwork* net = core.GetNetwork();
  2071.     if (net->IsConnected() == true)
  2072.     {
  2073.         BitStream s;
  2074.         s.Write((MessageID)GO_SCRIPT);
  2075.         s.Write((MessageID)SCRIPT_VISUAL);
  2076.         s.Write(RakString(bodyModel.ToChar()));
  2077.         s.Write(bodyTexture);
  2078.         s.Write(RakString(headModel.ToChar()));
  2079.         s.Write(headTexture);
  2080.         net->GetPeer()->Send(&s, LOW_PRIORITY, RELIABLE_ORDERED, 0, net->GetServerAddress(), false);
  2081.     }
  2082.  
  2083.     return 0;
  2084. }
  2085.  
  2086. SQInteger SFunction::setOverlay(HSQUIRRELVM vm)
  2087. {
  2088.     SQ_CHECK_PARAM_COUNT(vm, 1);
  2089.     SQ_CHECK_PARAM_STRING(vm, overlay, 0);
  2090.  
  2091.     oCNpc::GetHero()->ApplyOverlay(zSTRING(overlay));
  2092.     CNetwork* net = core.GetNetwork();
  2093.     if (net->IsConnected() == true)
  2094.     {
  2095.         BitStream s;
  2096.         s.Write((MessageID)GO_SCRIPT);
  2097.         s.Write((MessageID)SCRIPT_OVERLAY);
  2098.         s.Write(RakString(overlay));
  2099.  
  2100.         net->GetPeer()->Send(&s, LOW_PRIORITY, RELIABLE_ORDERED, 0, net->GetServerAddress(), false);
  2101.     }
  2102.  
  2103.     return 0;
  2104. }
Advertisement
Add Comment
Please, Sign In to add comment