#include "items\items.h" object randItemModels[MAX_LOADED_RANDITEMS]; object itemModels[ITEMS_QUANTITY]; object buttonModels[MAX_BUTTONS]; aref useLocators[MAX_BUTTONS]; aref useAttrs[MAX_BUTTONS]; int useLocatorsCount=0; float SPAWN_TIME = 168.0; //hours = 168.0 void Items_LoadModel (ref _itemModel, ref _item) { if (!IsEntity(_itemModel)) { string itemFolder = "items"; CreateEntity(&_itemModel, "MODELR"); if (CheckAttribute(_item, "folder")) itemFolder = _item.folder; SendMessage(&_itemModel, "ls", MSG_MODEL_SET_DIRPATH, itemFolder+"\"); SendMessage(&_itemModel, "ls", MSG_MODEL_LOAD_GEO, itemFolder + "\" + _item.model); SendMessage(&_itemModel, "ls", MSG_MODEL_SET_DIRPATH,""); SendMessage(&_itemModel, "ls", MSG_MODEL_SET_TECHNIQUE, "RandItem"); LayerAddObject("execute", &_itemModel, ITEMS_LAYER); LayerAddObject("realize", &_itemModel, ITEMS_LAYER); Trace("ItemLogic: Loaded model "+itemFolder+"\"+_item.model); } } void Item_OnLoadLocation(string currentLocation) { Trace("ItemLogic: On load location "+currentLocation); // precache active locators in current location aref activeLocation; ref chr = GetMainCharacter(); int currentLocationIndex = FindLocation(currentlocation); chr.itemLocationIndex = currentLocationIndex; aref aloc, an, al; useLocatorsCount = 0; makearef(activeLocation, Locations[currentLocationIndex]); makearef (aloc, activeLocation.items); for (int i=0; i BUTTON_ACTIVATION_TIME) { al.active = false; continue; } usedOnFrame = true; float timeK = makefloat(timePassed) / makefloat(BUTTON_ACTIVATION_TIME); float deltaY = makefloat(an.deltaY) * timeK; SendMessage(&buttonModels[i], "lffffffffffff", MSG_MODEL_SET_POSITION, makeFloat(al.x), makeFloat(al.y)+deltaY, makeFloat(al.z), makeFloat(al.vx.x), makeFloat(al.vx.y), -makeFloat(al.vx.z), makeFloat(al.vy.x), makeFloat(al.vy.y), -makeFloat(al.vy.z), makeFloat(al.vz.x), makeFloat(al.vz.y), -makeFloat(al.vz.z)); for (int j=0; j>"+Items[_itemN].startLocator); Trace ("ItemLogic: showing item at "+al.x+", "+al.y+", "+al.z); SendMessage(&itemModels[_itemN], "lffffffffffff", MSG_MODEL_SET_POSITION, makeFloat(al.x), makeFloat(al.y), makeFloat(al.z), makeFloat(al.vx.x), makeFloat(al.vx.y), -makeFloat(al.vx.z), makeFloat(al.vy.x), makeFloat(al.vy.y), -makeFloat(al.vy.z), makeFloat(al.vz.x), makeFloat(al.vz.y), -makeFloat(al.vz.z)); } else { //used if (Items[_itemN].useLocation != activeLocation.id) return; Items_LoadModel(&itemModels[_itemN], &Items[_itemN]); for (int i=0; i chrRank) { return false; } float itemProb = 0.05; if (CheckAttribute(randItem, "rare")) { itemProb = stf(randItem.rare); } if (isAbordageBox) { itemProb = itemProb * (1.5 + luck/20.0); } if (itemProb > 1.0) { itemProb = 1.0; } int rndNumber = rand(1000); if (rndNumber > (itemProb*1000)) { return false; } _id = randItem.id; return true; }